Cuestionario Ampliado del Censo de Población y Vivienda 2020
El cuestionario ampliado se guarda en un un archivo
.RData.
data <- read_sav("~/Personas_Censo 2020.SAV")
save(data,
file = paste0(here::here(), "/Bases/Censo_Personas_2020.RData"))Se seleccionan las variables que se desean conservar para la
realización de este documento y se guarda en un archivo
.RData para practicidad del manejo de datos.
load(paste0(here::here(), "/Bases/Censo_Personas_2020.RData"))
mydata <- data %>%
select(CVE_ENT, ENT, MUN, CVE_MUN, ENT_PAIS_RES_5A, MUN_RES_5A, CVE_MUN_TRABAJO15,
ENT_PAIS_NAC, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO,
ENT_PAIS_ASI, MUN_ASI, CVE_MUN_ASI, EDAD, SEXO, AFRODES, HLENGUA, QDIALECT_INALI,
PERTE_INDIGENA, ALFABET, CAUSA_MIG, SITUA_CONYUGAL, HIJOS_NAC_VIVOS,
CONACT, OCUPACION_C, SITTRA, VACACIONES, SERVICIO_MEDICO, INCAP_SUELDO, INGTRMEN,
ACTIVIDADES_C, TIE_TRASLADO_TRAB, MED_TRASLADO_TRAB1, MED_TRASLADO_TRAB2, MED_TRASLADO_TRAB3,
ASISTEN, NIVACAD, ESCOLARI, ESCOACUM, NOMCAR_C, TIE_TRASLADO_ESCU,
MED_TRASLADO_ESC1, MED_TRASLADO_ESC2, MED_TRASLADO_ESC3,
FACTOR, ESTRATO, UPM) Zonas Metropolitanas 2020
Se anexa la base de datos de las Zonas Metropolitanas 2020 a la base orginal
ZM_2020 <- read.xlsx(paste0(here::here(), "/Bases/Municipio/ZM_2020.xlsx"),
startRow = 7,
skipEmptyRows = TRUE) %>%
select(CVE_ZM, NOM_ZM, CVE_ENT, NOM_ENT, CVE_MUN, NOM_MUN, MC, CF) %>%
mutate(CVE_ENT = stringr::str_pad(.$CVE_ENT, width = 3, side = c("left"), pad = "0"),
CVE_MUN = stringr::str_pad(.$CVE_MUN, width = 6, side = c("left"), pad = "0"))Se asignan las claves de las zonas metropolitanas de acuerdo a las diferentes variables de interes: - Residencia hace 5 años - Laboral - Estudiantil - Nacimiento
mydata <- mydata %>%
# Zonas Metropolitanas por residenicia
left_join(., ZM_2020 %>% select(-CVE_ENT), by = c("CVE_MUN")) %>%
# Zonas Metropolitanas en el lugar de residencia hace 5 años
left_join(., ZM_2020 %>% select(-CVE_ENT, -NOM_ENT, -NOM_MUN) %>%
rename("CVE_ZM_RES15" = "CVE_ZM",
"ZM_RES15" = "NOM_ZM",
"MC_RES15" = "MC",
"CF_RES15" = "CF"), by = c("CVE_MUN_TRABAJO15" = "CVE_MUN")) %>%
# Zonas Metropolitanas en el lugar de trabajo
left_join(., ZM_2020 %>% select(-CVE_ENT, -NOM_ENT, -NOM_MUN) %>%
rename("CVE_ZM_TRABAJO" = "CVE_ZM",
"ZM_TRABAJO" = "NOM_ZM",
"MC_TRABAJO" = "MC",
"CF_TRABAJO" = "CF"), by = c("CVE_MUN_TRABAJO" = "CVE_MUN")) %>%
# Zonas Metropolitanas en el lugar de trabajo
left_join(., ZM_2020 %>% select(-CVE_ENT, -NOM_ENT, -NOM_MUN) %>%
rename("CVE_ZM_ASI" = "CVE_ZM",
"ZM_ASI" = "NOM_ZM",
"MC_ASI" = "MC",
"CF_ASI" = "CF"), by = c("CVE_MUN_ASI" = "CVE_MUN"))
save(mydata, file = paste0(here::here(), "/Bases/06_Migracion por Zonas Metropolitanas_2020.RData")) ✔️A partir de aquí se pueden correr los códidos 👇. Se carga el
archivo Migracion por Zonas Metropolitanas_2020.RData.
load(file = paste0(here::here(), "/Bases/06_Migracion por Zonas Metropolitanas_2020.RData"))
# Para fines prácticos se genera un ponderador de uno
mydata <- mydata %>%
select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO,
EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
mutate(M = 1)
# Se vuelve a cargar la base de datos para fines practicos
ZM_2020 <- read.xlsx(paste0(here::here(), "/Bases/Municipio/ZM_2020.xlsx"),
startRow = 7,
skipEmptyRows = TRUE) %>%
mutate(CVE_ENT = stringr::str_pad(.$CVE_ENT, width = 3, side = c("left"), pad = "0"),
CVE_MUN = stringr::str_pad(.$CVE_MUN, width = 6, side = c("left"), pad = "0"))Entidades y Municipios
Se genera un vector con el nombre de las entidades llamado
estados para facilitar los filtros en el documento.
Se genera un vector con las abreviaturas de las entidades llamado
ent para fines prácticos.
Se genera un vector con las claves de los municipios, pero es importante
hacer notar que tres municipios no entraron el muestreo del Cuestionario
Ampliado.
# Claves de los estados
estados <- sjlabelled::get_labels(mydata$CVE_ENT)
nom_estados <- c( "Aguascalientes", "Baja California" ,"Baja California Sur", "Campeche", "Coahuila de Zaragoza",
"Colima", "Chiapas", "Chihuahua", "Ciudad de México", "Durango", "Guanajuato", "Guerrero", "Hidalgo",
"Jalisco", "México", "Michoacán de Ocampo", "Morelos", "Nayarit", "Nuevo León", "Oaxaca", "Puebla",
"Querétaro", "Quintana Roo", "San Luis Potosí", "Sinaloa", "Sonora", "Tabasco", "Tamaulipas", "Tlaxcala",
"Veracruz de Ignacio de la Llave", "Yucatán", "Zacatecas")
est <- c("AGS", "BC", "BCS", "CAMP", "COAH", "COL", "CHIS", "CHIH", "CDMX", "DGO", "GTO", "GRO", "HGO",
"JAL", "MEX", "MICH", "MOR", "NAY", "NL", "OAX", "PUE", "QRO", "QROO", "SLP","SIN","SON", "TAB",
"TAMS", "TLX", "VER", "YUC", "ZAC")
# Claves de los municipios
MUN <- readRDS(paste0(here::here(), "/Bases/municipios_2020.RDS"))
nom_municipios <- sjlabelled::get_labels(MUN$NOM_MUN) %>% as.factor()
municipios <- sjlabelled::get_labels(MUN$CVE_MUN) %>% as.factor()
#saveRDS(MUN, file = paste0(here::here(), "/Bases/municipios_2020.RDS"))
# Claves de las zonas metropolitanas
zm <- sjlabelled::get_labels(mydata$CVE_ZM)[-2]
nom_zm <- sjlabelled::get_labels(mydata$NOM_ZM)[-2]Se utiliza la paquetería survey para poder trabajar con
la muestra del cuestionario ampliado, en la cual se selecciona a la
población de 5 años y más.
options(survey.lonely.psu = "adjust")
MC <- mydata %>%
select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO,
EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
# Se genera una indicadora de zm
mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
# Se clasifican a los migrantes internos
mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
)) %>%
filter((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
filter(CVE_MUN_TRABAJO %in% municipios) %>%
svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)
#MC %>%
#group_by(I_ZM) %>%
#summarise(Total = format(sum(FACTOR), big.mark = " ", scientific = FALSE))
saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_municipal.RDS"))MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_municipal.RDS"))
Migrantes <- svytable(~CVE_MUN_TRABAJO + CVE_MUN, design = MC)Se genera la matriz cuadrada y se le asignan las etiquetas de municipios.
Migrantes <- Migrantes %>%
as.data.frame() %>%
expss::cross_cases(CVE_MUN, CVE_MUN_TRABAJO, weight = Freq) %>%
as.data.frame() %>%
rename("CVE_MUN" = "row_labels") %>%
arrange(CVE_MUN) %>%
slice(-1)
rownames <- Migrantes %>%
mutate(CVE_MUN = substr(.$CVE_MUN, 9, 16)) %>%
pull(CVE_MUN)
colnames <- names(Migrantes) %>%
as.data.frame() %>%
slice(-1) %>%
rename("CVE_MUN" = ".") %>%
mutate(`CVE_MUN` = substr(.$CVE_MUN, 17, 22)) %>%
pull(CVE_MUN)
# Se elimina la variable CVE_MUN
Migrantes <- Migrantes %>%
select(-CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
saveRDS(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel municipal 2020.RDS"))
save(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel municipal 2020.RData"))
require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "M.Reciente")
writeData(wb, 1, Migrantes %>% as.data.frame() %>% tibble::rownames_to_column(var = "CVE_MUN"), colNames = TRUE)
saveWorkbook(wb, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel municipal 2020.xlsx"), overwrite = TRUE)Matriz de movilidad laboral hace 5 años a nivel municipal, 2015 - 2020
| Matriz de movilidad laboral por zonas metropolitanas | |||||||||||||||||||||||||||||
| Nivel municipal | |||||||||||||||||||||||||||||
| CVE_MUN | 001001 | 001002 | 001003 | 001004 | 001005 | 001006 | 001007 | 001008 | 001009 | 001010 | 001011 | 002001 | 002002 | 002003 | 002004 | 002005 | 002006 | 003001 | 003002 | 003003 | 003008 | 003009 | 004001 | 004002 | 004003 | 004004 | 004005 | 004006 | 004007 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||||||||||||||||||||
Se filtran los flujos migratorios que son exclusivos de los estados y que visualmente sean más interpretables.
load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel municipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 100)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 100)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
# Nombre de las Zonas Metropolitanas
NOM_ZM <- stringr::str_wrap(nom_zm, 100)
## Tomamos las Zonas Metropolitanas con más de 3 municipios que tienen flujos migratorios
#### Con filtro (CF)
ZM_CF <- ZM_2020 %>%
group_by(CVE_ZM) %>%
summarise(Count = n()) %>%
filter(Count >= 0) %>%
pull(CVE_ZM)
NOM_ZM_CF <- ZM_2020 %>%
filter(CVE_ZM %in% ZM_CF) %>%
distinct(CVE_ZM, NOM_ZM)
ZM <- lapply(1:length(ZM_CF), function(x){
ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% ZM_CF[x]) %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 100)) %>%
pull(NOM_MUN)
})
################################################################################
################################## Filtro ######################################
Inmigrantes <- Inmigrantes_function(ZM, Migrantes)
Emigrantes <- Emigrantes_function(ZM, Migrantes)
################################## Filtro ######################################
#p <- data.frame(ZM = ZM_CF,
# filtro_municipio = tabla_municipios,
# filtro_estado = tabla_estados)
#write.table(p, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel municipal.txt"),
# col.names = TRUE)
#write.xlsx(p, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel municipal.xlsx"), overwrite = TRUE)
#### Filtro de municipios
filtro_mig <- read.xlsx(paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel municipal.xlsx"), colNames = TRUE) %>%
pull(filtro_municipio)
#### Filtro de estados
filtro_out <- read.xlsx(paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel municipal.xlsx"), colNames = TRUE) %>%
pull(filtro_estado)
################################################################################
################################################################################
tabla1 <- lapply(1:length(ZM_CF), function(x){
# filtro de municipios de la ZM
filtro <- Inmigrantes[[x]] %>%
full_join(., Emigrantes[[x]], by = c("rn" = "cn")) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value > filtro_mig[x]) %>% ## Cambia el filtro de los municipios de la Zonas Metropolitanas
pull(rn)
# filtro de estados
filtro_est <- Inmigrantes[[x]] %>%
full_join(., Emigrantes[[x]], by = c("rn" = "cn")) %>%
filter(rn %nin% ZM[[x]]) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
mutate(rn = substr(.$rn, 1, 3)) %>%
group_by(rn) %>%
summarise(value = sum(value)) %>%
filter(value >= filtro_out[x]) %>%
pull(rn)
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM[[x]] | .$cn %in% ZM[[x]]) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM[[x]] | .$cn %in% ZM[[x]]), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM[[x]] & .$rn %in% filtro ~ substr(.$rn, 2, nchar(.$rn)),
.$rn %in% ZM[[x]] & .$rn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$rn, 1, 3))], "ZM"), 100),
.$rn %nin% ZM[[x]] & substr(.$rn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$rn, 1, 3))]), 100),
.$rn %nin% ZM[[x]] & substr(.$rn, 1, 3) %nin% filtro_est ~ "Otros estados"),
cn = case_when(.$cn %in% ZM[[x]] & .$cn %in% filtro ~ substr(.$cn, 2, nchar(.$cn)),
.$cn %in% ZM[[x]] & .$cn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$cn, 1, 3))], "ZM"), 100),
.$cn %nin% ZM[[x]] & substr(.$cn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$cn, 1, 3))]), 100),
.$cn %nin% ZM[[x]] & substr(.$cn, 1, 3) %nin% filtro_est ~ "Otros estados")) %>%
filter(value > 0) %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")
}
)
## Se sacan los flujos migratorios que pertencen a otros estados
#tabla_estados <- sapply(1:length(ZM_CF), function(i){
# tabla1[[i]] %>%
# as.data.frame() %>%
# adorn_totals(c("row", "col"),
# fill = "-",
# na.rm = TRUE,
# ,,,,contains(colnames(tabla1[[i]]))) %>%
# select(`Otros estados`) %>%
# slice(nrow(.)) %>%
# mutate(`Otros estados` = .$`Otros estados`/4) %>%
# pull(`Otros estados`)
#})
## Se sacan los flujos migratorios que pertencen a otros municipios
#tabla_municipios <- sapply(1:length(ZM_CF), function(i){
# p <- tabla1[[i]] %>%
# as.data.frame() %>%
# select(-c(`Otros estados`)) %>%
# slice(-nrow(.))
# if(sum(p) == 0) {
# return(0)
# } else {
# p %>%
# adorn_totals(c("row", "col"),
# fill = "-",
# na.rm = TRUE,
# ,,,,contains(colnames(tabla1[[i]]))) %>%
# slice(nrow(.)) %>%
# mutate(Total = .$Total/50) %>%
# pull(Total)
# }
#
#})
## Se guardan las matrices de movilidad laboral para analizarlos después.
wb <- createWorkbook()
for(i in 1:length(ZM)){
tabla <- tabla1[[i]] %>%
as.data.frame() %>%
adorn_totals(c("row", "col"),
fill = "-",
na.rm = TRUE,
,,,,contains(colnames(tabla1[[i]])))
addWorksheet(wb, paste(ZM_CF[i]))
writeData(wb, i, tabla, colNames = TRUE, rowNames = TRUE)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel municipal_Reduccion.xlsx"),
overwrite = TRUE)
}
saveRDS(tabla1, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel municipal.RDS"))tabla1 <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel municipal.RDS"))
total_tablas <- totales(tabla1, ZM)
porcentajes_tablas <- porcentajes(tabla1, ZM)
# Se guardan los totales de las matrices reducidas
wb <- createWorkbook()
for(i in 1:length(ZM)){
addWorksheet(wb, paste(ZM_CF[i]))
writeData(wb, i, totales[[i]], colNames = TRUE, startCol = 1)
writeData(wb, i, porcentajes[[i]], colNames = TRUE, startCol = 5)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel municipal_Reduccion_Totales.xlsx"),
overwrite = TRUE)
}tabla1 <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel municipal.RDS"))
#paleta <- colorRampPalette(pals::ocean.matter(100))(50)
paleta <- c("#170A3A", "#7D1D6B", "#871D62","#952664", "#AE2A5E", "#CA3F56", "#DB5854", "#E45B2F", "#E86328", "#ED8861", "#F4A472", "#F4CA72", "#E8B94B")
tabla2 <- color_chord_diagram(tabla1, ZM_CF = ZM_CF, paleta)file = "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab desagregado por ZM.pdf"
## Gráficos a nivel municipal
chord_diagram_graph(file = file,
width = 15,
height = 10,
family = "Montserrat Medium",
paleta = paleta,
ZM_CF = ZM_CF,
tabla1,
tabla2,
color_labels = "#170A3A",
margin = c(0, 0, 0, 0))Etiquetas
## Tomamos las Zonas Metropolitanas con más de 3 municipios con flujos migratorios
ZM_CF <- ZM_2020 %>%
group_by(CVE_ZM) %>%
summarise(Count = n()) %>%
filter(Count > 2) %>%
pull(CVE_ZM)
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn")
tabla1 <- lapply(1:length(ZM_CF), function(x){
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% ZM_CF[x]) %>%
mutate(NOM_MUN = paste(.$CVE_MUN, .$NOM_MUN)) %>%
pull(NOM_MUN)
tabla %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0)
}
)p <- lapply(1:length(ZM_CF), function(x){
tabla1[[x]] %>%
ggplot(aes(axis1 = rn,
axis2 = cn,
y = value), # c("value", "freq", "tasa")
reverse = FALSE,
na.rm = TRUE) +
geom_alluvium(aes(fill = rn),
curve_type = "quintic",
color = "transparent",
alpha = 0.85,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_stratum(aes(fill = cn),
color = "white",
alpha = 0.65,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 1, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 1, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = -.2,
min.segment.length = unit(1, "lines"),
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 2, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 2, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = .2,
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
theme_void() +
theme(plot.margin = margin(t = 1, r = 1.5, b = 1, l = 0, "cm"),
text = element_text(family = "montserrat"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 10, face = "bold", family = "montserrat"),
legend.key.size = unit(0.5, "cm"),
legend.text = element_text(size = 9, family = "montserrat"),
legend.position = c(1, .5)) +
scale_x_discrete(expand = c(-0.1, 0.35)) +
scale_fill_viridis_d(option = "A", end = 0.9, begin = 0.2) +
guides(fill = guide_legend(ncol = 1, na.translate = F)) +
labs(fill = "",
color = "")
}
)
path = paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/GSankey de MTrab desagregado por ZM_Absolutos (Intramunicipal).pdf")
ggexport(list = p, width = 14, height = 10, dpi = 400, filename = path)load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel municipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN), by = c("CVE_MUN")) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN), by = c("CVE_MUN")) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 30)) %>%
pull(NOM_MUN)
################################################################################
################################## Filtro ######################################
################################## Filtro ######################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
################################## Filtro ######################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value > 40000) %>%
pull(rn)
filtro_est <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
filter(rn %nin% ZM) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
mutate(rn = substr(.$rn, 1, 3)) %>%
group_by(rn) %>%
summarise(value = sum(value)) %>%
filter(value >= 25000) %>%
pull(rn)
################################################################################
tabla1 <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM | .$cn %in% ZM) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM| .$cn %in% ZM), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM & .$rn %in% filtro ~ substr(.$rn, 2, nchar(.$rn)),
.$rn %in% ZM & .$rn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$rn, 1, 3))], "ZMVM"), 50),
.$rn %nin% ZM & substr(.$rn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$rn, 1, 3))]), 50),
.$rn %nin% ZM & substr(.$rn, 1, 3) %nin% filtro_est ~ "Otros estados"),
cn = case_when(.$cn %in% ZM & .$cn %in% filtro ~ substr(.$cn, 2, nchar(.$cn)),
.$cn %in% ZM & .$cn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$cn, 1, 3))], "ZMVM"), 50),
.$cn %nin% ZM & substr(.$cn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$cn, 1, 3))]), 50),
.$cn %nin% ZM & substr(.$cn, 1, 3) %nin% filtro_est ~ "Otros estados")) %>%
filter(value > 0) %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn") # Paleta de colores
groupColors <- paste0(rev(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1)))))), "7F")
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab de ZMVM (Municipal).pdf"),
width = 7, height = 7,
family = "Montserrat Medium",
fallback_resolution = 400,
onefile = TRUE)
circos.clear()
circos.par(start.degree = 90,
clock.wise = TRUE,
gap.degree = 3,
track.margin = c(-0.2, 0.2),
points.overflow.warning = FALSE)
par(mar = rep(1.5, 4))
# Paleta de colores
groupColors <- setNames(rev(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1)))))),
nm = unique(c(colnames(tabla1), rownames(tabla1))))
chordDiagram(x = tabla1 %>% as.matrix(),
grid.col = groupColors,
order = union(rownames(tabla1), colnames(tabla1)),
keep.diagonal = FALSE,
symmetric = FALSE,
scale = FALSE,
transparency = 0.25,
directional = 1,
direction.type = c("arrows", "diffHeight"),
diffHeight = -0.04,
annotationTrack = "grid",
annotationTrackHeight = mm_h(c(3)), # ancho borde
preAllocateTracks = 1,
big.gap = 40,
link.arr.type = "big.arrow",
link.lwd = 0.5,
link.visible = TRUE,
link.largest.ontop = FALSE)
# Add text and axis
circos.trackPlotRegion(track.index = 1,
track.height = 0.05,
bg.border = NA,
panel.fun = function(x, y) {
xlim = get.cell.meta.data("xlim")
ylim = get.cell.meta.data("ylim")
sector.name = get.cell.meta.data("sector.index")
# Add names to the sector.
circos.text(x = mean(xlim),
y = ylim[1] + 0.2, #Ajusta a las etiquetas del origen
labels = sector.name,
facing = "clockwise",
niceFacing = TRUE,
adj = c(-0.01, 0.5), #Ajuste de las etiquetas (x, y)
cex = fontsize(7),
col = "#170A3A",
font = 1)
# Add graduation on axis
circos.axis(h = "top",
labels = c(0, 10, 20, 50, 100, 200, 300, 400, 500, 1000, seq(1000, 20000, by = 100000)),
major.tick.length = 0.2,
minor.ticks = 2,
labels.cex = fontsize(5),
sector.index = sector.name,
track.index = 2,
labels.niceFacing = TRUE,
labels.pos.adjust = c(0, 0.8))
}
)
dev.off()load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel municipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN), by = c("CVE_MUN")) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 100)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN), by = c("CVE_MUN")) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 100)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 100)) %>%
pull(NOM_MUN)
################################################################################
################################## Filtro ######################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
################################## Filtro ######################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value > 40000) %>%
pull(rn)
filtro_est <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
filter(rn %nin% ZM) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
mutate(rn = substr(.$rn, 1, 3)) %>%
group_by(rn) %>%
summarise(value = sum(value)) %>%
filter(value >= 25000) %>%
pull(rn)
################################################################################
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM | .$cn %in% ZM) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM| .$cn %in% ZM), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM & .$rn %in% filtro ~ substr(.$rn, 2, nchar(.$rn)),
.$rn %in% ZM & .$rn %nin% filtro ~ str_wrap(paste(substr(estados[as.numeric(substr(.$rn, 1, 3))], 2, 3), "ZMVM"), 100),
.$rn %nin% ZM & substr(.$rn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$rn, 1, 3))]), 100),
.$rn %nin% ZM & substr(.$rn, 1, 3) %nin% filtro_est ~ "Otros estados"),
cn = case_when(.$cn %in% ZM & .$cn %in% filtro ~ substr(.$cn, 2, nchar(.$cn)),
.$cn %in% ZM & .$cn %nin% filtro ~ str_wrap(paste(substr(estados[as.numeric(substr(.$cn, 1, 3))], 2, 3), "ZMVM"), 100),
.$cn %nin% ZM & substr(.$cn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$cn, 1, 3))]), 100),
.$cn %nin% ZM & substr(.$cn, 1, 3) %nin% filtro_est ~ "Otros estados")) %>%
filter(value > 0)
tabla1 <- tabla %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")
# Grupo 1
grupo1 <- tabla %>%
filter(substr(.$rn, 1, 2) == "09") %>%
pull(rn) %>%
unique()
# Grupo 2
grupo2 <- tabla %>%
filter(substr(.$rn, 1, 2) == "15") %>%
pull(rn) %>%
unique()
# Grupo 3
grupo3 <- tabla %>%
filter(substr(.$rn, 1, 2) == "13") %>%
pull(rn) %>%
unique()
# Grupo 4
grupo4 <- tabla %>%
filter(substr(.$rn, 1, 2) %nin% c("09", "15", "13")) %>%
pull(rn) %>%
unique()
## Se guardan las matrices de movilidad laboral para analizarlos después.
tabla <- tabla1 %>%
as.data.frame() %>%
adorn_totals(c("row", "col"),
fill = "-",
na.rm = TRUE,
,,,,contains(colnames(tabla1)))
wb <- createWorkbook()
addWorksheet(wb, "ZMVM")
writeData(wb, 1, tabla, colNames = TRUE, rowNames = TRUE)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab de ZMVM a nivel municipal_Reduccion.xlsx"),
overwrite = TRUE)# Paleta de colores
groupColors <- paste0(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1))))), "7F")
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab de ZMVM_grupos (Municipal).pdf"),
width = 10, height = 10,
family = "Montserrat Medium",
fallback_resolution = 400,
onefile = TRUE)
circos.clear()
circos.par(start.degree = 90,
clock.wise = TRUE,
gap.degree = 3,
track.margin = c(-0.2, 0.2),
points.overflow.warning = FALSE)
par(mar = rep(0, 4))
# Paleta de colores
groupColors <- setNames(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1))))),
nm = unique(c(colnames(tabla1), rownames(tabla1))))
chordDiagram(x = tabla1 %>% as.matrix(),
grid.col = groupColors,
order = union(rownames(tabla1), colnames(tabla1)),
keep.diagonal = FALSE,
symmetric = FALSE,
scale = FALSE,
transparency = 0.25,
directional = 1,
direction.type = c("arrows", "diffHeight"),
diffHeight = -0.04,
annotationTrack = "grid",
annotationTrackHeight = mm_h(c(3)), # ancho borde
preAllocateTracks = 1,
big.gap = 40,
link.arr.type = "big.arrow",
link.lwd = 0.5,
link.visible = TRUE,
link.largest.ontop = FALSE)
# Add text and axis
circos.trackPlotRegion(track.index = 1,
track.height = 0.05,
bg.border = NA,
panel.fun = function(x, y) {
xlim = get.cell.meta.data("xlim")
ylim = get.cell.meta.data("ylim")
sector.name = get.cell.meta.data("sector.index")
# Add names to the sector.
circos.text(x = mean(xlim),
y = ylim[1] + 1, #Ajusta a las etiquetas del origen
labels = sector.name,
facing = "clockwise",
niceFacing = TRUE,
adj = c(-0.01, 0.5), #Ajuste de las etiquetas (x, y)
cex = fontsize(9),
col = "#170A3A",
font = 1)
# Add graduation on axis
circos.axis(h = "top",
labels = c(0, 10, 20, 50, 100, 200, 300, 400, 500, 1000, seq(1000, 20000, by = 100000)),
major.tick.length = 0.2,
minor.ticks = 2,
labels.cex = fontsize(7),
sector.index = sector.name,
track.index = 2,
labels.niceFacing = TRUE,
labels.pos.adjust = c(0, 0.8))
}
)
highlight.sector(grupo1,
track.index = 1,
col = groupColors[1],
text = "Ciudad de México",
cex = 1.5,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0), niceFacing = TRUE)
highlight.sector(grupo2,
track.index = 1,
col = groupColors[15],
text = "México",
cex = 1.5,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0),
niceFacing = TRUE)
highlight.sector(grupo3,
track.index = 1,
col = groupColors[20],
text = "Hidalgo",
cex = 1,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0),
niceFacing = TRUE)
highlight.sector(grupo4,
track.index = 1,
col = groupColors[30],
text = "Otro municipios",
cex = 1.5,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0),
niceFacing = TRUE)
dev.off()Etiquetas
etiquetas <- lapply(1, function(x){
orden <- str_sort(unique(c(colnames(tabla1), rownames(tabla1))), numeric = TRUE)
p <- tabla1 %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
as.data.frame() %>%
mutate(rn = str_wrap(.$rn, 100),
cn = str_wrap(.$cn, 100)) %>%
ggplot() +
geom_bar(aes(x = value, fill = as.character(rn, orden))) +
geom_bar(aes(x = value, fill = as.character(cn, orden))) +
theme(plot.margin = margin(t = 1, r = 1.5, b = 1, l = 0, "cm"),
text = element_text(family = "Montserrat Medium"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 9, face = "bold", family = "Montserrat Medium"),
legend.key.size = unit(0.4, "cm"),
legend.spacing.y = unit(0.4, "cm"),
legend.text = element_text(size = 7, family = "Montserrat Medium"),
legend.title = element_text(size = 8 , family = "Montserrat Medium")) +
scale_fill_manual(values = colorRampPalette(paleta)(max(ncol(tabla1), nrow(tabla1)))) +
guides(fill = guide_legend(ncol = 1)) +
guides(fill = guide_legend(ncol = 1)) +
labs(fill = "ZM del Valle de México",
color = "ZM del Valle de México")
leg <- get_legend(p)
as_ggplot(leg)
})
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Etiquetas ZMVM a nivel municipal.pdf"),
width = 7, height = 8,
fallback_resolution = 400,
family = "montserrat", onefile = TRUE)
for(i in 1){
print(etiquetas[i])
}
dev.off()Zona Metropolitana del Valle de México
(ZMVM)
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = paste(.$CVE_MUN, .$NOM_MUN)) %>%
pull(NOM_MUN)
##########################################################################################
######################################## Filtro ##########################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
######################################## Filtro ##########################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
mutate(value = Inmigrantes + Emigrantes) %>%
filter(value < 30000) %>%
pull(rn)
#########################################################################################
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
mutate(rn = ifelse(.$rn %in% filtro, stringr::str_wrap(paste0(substr(as.character(.$rn), 1, 3), " Otros municipios(", estados[as.numeric(substr(as.character(.$rn), 1, 3))], ")"), 20), .$rn),
cn = ifelse(.$cn %in% filtro, stringr::str_wrap(paste0(substr(as.character(.$cn), 1, 3), " Otros municipios(", estados[as.numeric(substr(as.character(.$cn), 1, 3))], ")"), 20) , .$cn)) %>%
filter(value > 0)
p <- tabla %>%
ggplot(aes(axis1 = rn,
axis2 = cn,
y = value), # c("value", "freq", "tasa")
reverse = FALSE,
na.rm = TRUE) +
geom_alluvium(aes(fill = rn),
curve_type = "quintic",
color = "transparent",
alpha = 0.85,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_stratum(aes(fill = cn),
color = "white",
alpha = 0.65,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 1, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 1, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = -.23,
min.segment.length = unit(1, "lines"),
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 2, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 2, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = .23,
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
theme_void() +
theme(plot.margin = margin(t = 1, r = 4, b = 1, l = 0, "cm"),
text = element_text(family = "montserrat"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 10, face = "bold", family = "montserrat"),
legend.key.size = unit(0.5, "cm"),
legend.text = element_text(size = 9, family = "montserrat"),
legend.position = c(0.999, .5)) +
scale_x_discrete(expand = c(-0.1, 0.5)) +
scale_fill_viridis_d(option = "A", end = 0.9, begin = 0.2) +
guides(fill = guide_legend(ncol = 1, na.translate = F)) +
labs(fill = "",
color = "")
path = paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/GSankey de MTrab de la ZMVM (Intramunicipal).pdf")
ggexport(p, width = 20, height = 12, dpi = 400, filename = path)Se realizan cálculos generales de migración
- Residentes
- Inmigrantes
- Emigrantes
- % Inmigrantes
- % Emigrante
- Migración bruta
- Migración Neta
- % Tasa de migración bruta
- % Tasa de migración neta
Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora
################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
as.data.frame() %>%
group_by(CVE_MUN) %>%
summarise(Pob.Total = sum(FACTOR))
################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
as.data.frame() %>%
mutate(EDAD = as.numeric(.$EDAD)) %>%
subset((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
group_by(CVE_MUN) %>%
summarise(Pob.ocupada = sum(FACTOR))
################################################################################
########################### Residentes #########################################
load(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel municipal 2020.RData"))
Residentes <- Migrantes %>%
rownames_to_column() %>%
gather(CVE_MUN, Value, -rowname)%>%
filter(rowname == CVE_MUN) %>%
select(-rowname) %>%
droplevels() %>%
rename("Residentes" = "Value")
################################################################################
############################### Inmigrantes ####################################
## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
as_tibble() %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
group_by(CVE_MUN) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
################################################################################
############################### Emigrantes #####################################
## Población que entra a la entidad para trabajar
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
as_tibble() %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
group_by(CVE_MUN_TRABAJO) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE)) %>%
rename("CVE_MUN" = "CVE_MUN_TRABAJO")
tabla <- Pob.Total %>%
left_join(., Pob.ocupada, by = c("CVE_MUN")) %>%
left_join(., Residentes, by = c("CVE_MUN")) %>%
left_join(., Inmigrantes, by = c("CVE_MUN")) %>%
left_join(., Emigrantes, by = c("CVE_MUN")) %>%
mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
Mig.Bruta = .$Inmigrantes + .$Emigrantes,
Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Mig = Tasa.Inmig - Tasa.Emig,
Eficacia = Mig.Neta - Mig.Bruta)
write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Municipal).xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Municipal).RData"))| Indicadores de movilidad laboral | |||||||||||
| Zonas Metropolitanas | |||||||||||
| Clave del municipio | Pob.Total | Pob.ocupada | Residentes | Inmigrantes | Emigrantes | Mig.Neta | Mig.Bruta | Tasa.Inmig | Tasa.Emig | Tasa.Mig | Eficacia |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||
Se utiliza la paquetería survey para poder trabajar con
la muestra del cuestionario ampliado, en la cual se selecciona a la
población de 5 años y más.
options(survey.lonely.psu = "adjust")
MC <- mydata %>%
select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO,
EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
# Se genera una indicadora de zm
mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
# Se clasifican a los migrantes internos
mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
)) %>%
filter((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
filter(CVE_MUN_TRABAJO %in% municipios & .$I_ZM %in% "Pertenecen a la Zona Metropolitana") %>%
svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)
saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_intramunicipal.RDS"))Se genera una matriz cruzada del lugar de residencia hace 5 años a
nivel municipal, utilizando la función svytable de la
paquetería survey.
MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_intramunicipal.RDS"))
Migrantes <- svytable(~CVE_MUN_TRABAJO + CVE_MUN, design = MC)Se genera la matriz cuadrada y se le asignan las etiquetas de municipios.
Migrantes <- Migrantes %>%
as.data.frame() %>%
expss::cross_cases(CVE_MUN, CVE_MUN_TRABAJO, weight = Freq) %>%
as.data.frame() %>%
rename("CVE_MUN" = "row_labels") %>%
arrange(CVE_MUN) %>%
slice(-1)
rownames <- Migrantes %>%
mutate(CVE_MUN = substr(.$CVE_MUN, 9, 16)) %>%
pull(CVE_MUN)
colnames <- names(Migrantes) %>%
as.data.frame() %>%
slice(-1) %>%
rename("CVE_MUN" = ".") %>%
mutate(`CVE_MUN` = substr(.$CVE_MUN, 17, 22)) %>%
pull(CVE_MUN)
# Se elimina la variable CVE_MUN
Migrantes <- Migrantes %>%
select(-CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
saveRDS(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intramunicipal 2020.RDS"))
save(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intramunicipal 2020.RData"))
require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "M.Intramunicipal")
writeData(wb, 1, Migrantes %>% as.data.frame() %>% tibble::rownames_to_column(var = "CVE_MUN"), colNames = TRUE)
saveWorkbook(wb, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intramunicipal 2020.xlsx"), overwrite = TRUE)Matriz de movilidad laboral hace 5 años a nivel municipal, 2015 - 2020
| Matriz de movilidad laboral por zonas metropolitanas | |||||||||||||||||||||||||||||
| Nivel intramunicipal | |||||||||||||||||||||||||||||
| CVE_MUN | 001001 | 001002 | 001003 | 001004 | 001005 | 001006 | 001007 | 001008 | 001009 | 001010 | 001011 | 002001 | 002002 | 002003 | 002004 | 002005 | 002006 | 003001 | 003002 | 003003 | 003008 | 003009 | 004001 | 004002 | 004003 | 004004 | 004005 | 004006 | 004007 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||||||||||||||||||||
MR <- NULL
for(i in 1:length(zm)){
tabla <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN) %>%
filter(CVE_ZM %in% zm[i]) %>%
pull(CVE_MUN)
MR[[paste0(zm[i])]] <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
mutate_if(is.numeric, as.numeric) %>%
select(CVE_MUN, tabla) %>%
filter(CVE_MUN %in% tabla)
}
# Se guardan en un objeto de R
saveRDS(MR, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matrices de MTrab a nivel intramunicipal por ZM2020.RDS"))
# Se genera un Excel con todas las matrices por ZM
wb <- createWorkbook()
for(i in 1:length(zm)){
addWorksheet(wb, paste0(zm[i]))
writeData(wb, i, MR[[paste0(zm[i])]] %>% as.data.frame())
saveWorkbook(wb,
file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matrices de MTrab a nivel intramunicipal por ZM2020.xlsx"),
overwrite = TRUE)
}Matriz de movilidad laboral en la Zona Metropolitana de Cuernavaca, 2015 - 2020
| Matriz de movilidad laboral a nivel intramunicipal | ||||||||||
| Zona Metropolitana de Cuernavaca | ||||||||||
| CVE_MUN | 017007 | 017008 | 017009 | 017011 | 017018 | 017020 | 017028 | 017029 | 017034 | 017035 |
|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | ||||||||||
Se filtran los flujos migratorios que son exclusivos de los estados y que visualmente sean más interpretables.
load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intramunicipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
# Nombre de las Zonas Metropolitanas
NOM_ZM <- stringr::str_wrap(nom_zm, 100)
## Tomamos las Zonas Metropolitanas con más de 3 municipios que tienen flujos migratorios
#### Con filtro (CF)
ZM_CF <- ZM_2020 %>%
group_by(CVE_ZM) %>%
summarise(Count = n()) %>%
filter(Count >= 3) %>%
pull(CVE_ZM)
NOM_ZM_CF <- ZM_2020 %>%
filter(CVE_ZM %in% ZM_CF) %>%
distinct(CVE_ZM, NOM_ZM)
ZM <- lapply(1:length(ZM_CF), function(x){
ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% ZM_CF[x]) %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(NOM_MUN)
})
################################################################################
################################## Filtro ######################################
Inmigrantes <- Inmigrantes_function(ZM, Migrantes)
Emigrantes <- Emigrantes_function(ZM, Migrantes)
################################# Filtro #######################################
### Sacar el promedio de los flujos migratiorios para determinar como se van a grupar los estados
#### Es importante correr la tabla1[[x]] sin filtros para determinar el número promedio de flujos de migración
### Filtro <<<< filter(value > 0 & rn != estado[x])
#p <- data.frame(ZM = ZM_CF,
# filtro_municipio = filtro_mig)
#write.table(p, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel intramunicipal.txt"), col.names = TRUE)
#write.xlsx(p, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel intramunicipal.xlsx"), overwrite = TRUE)
#### Filtro de municipios
filtro_mig <- read.xlsx(paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel intramunicipal.xlsx"), colNames = TRUE) %>%
pull(filtro_municipio)
################################################################################
tabla1 <- lapply(1:length(ZM), function(x){
filtro <- Inmigrantes[[x]] %>%
full_join(., Emigrantes[[x]], by = c("rn" = "cn")) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value < filtro_mig[x]) %>%
pull(rn)
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM[[x]] | .$cn %in% ZM[[x]]) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM[[x]] | .$cn %in% ZM[[x]]), value, 0)) %>%
mutate(rn = ifelse(.$rn %in% filtro,
stringr::str_wrap(paste0(substr(as.character(.$rn), 1, 3), " Otros municipios (", estados[as.numeric(substr(as.character(.$rn), 1, 3))], ")"), 40),
substr(.$rn, 2, nchar(.$rn))),
cn = ifelse(.$cn %in% filtro,
stringr::str_wrap(paste0(substr(as.character(.$cn), 1, 3), " Otros municipios (", estados[as.numeric(substr(as.character(.$cn), 1, 3))], ")"), 40),
substr(.$cn, 2, nchar(.$cn)))) %>%
filter(value > 0) %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")
})
## Se sacan los flujos migratorios que pertencen a otros municipios
#tabla_municipios <- sapply(1:length(ZM_CF), function(i){
# tabla1[[i]] %>%
# as.data.frame() %>%
# adorn_totals(c("row", "col"),
# fill = "-",
# na.rm = TRUE,
# ,,,,contains(colnames(tabla1[[i]]))) %>%
# slice(nrow(.)) %>%
# mutate(Total = .$Total/50) %>%
# pull(Total)
#})
## Se guardan las matrices de Movilidad laboral para analizarlos después.
wb <- createWorkbook()
for(i in 1:length(ZM)){
tabla <- tabla1[[i]] %>%
as.data.frame() %>%
adorn_totals(c("row", "col"),
fill = "-",
na.rm = TRUE, ,,,,contains(colnames(tabla1[[i]])))
addWorksheet(wb, paste(ZM_CF[i]))
writeData(wb, i, tabla, colNames = TRUE, rowNames = TRUE)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab nivel intramunicipal_Reduccion.xlsx"),
overwrite = TRUE)
}
saveRDS(tabla1, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel intramunicipal.RDS"))tabla1 <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel intramunicipal.RDS"))
total_tablas <- totales(tabla1, ZM)
porcentajes_tablas <- porcentajes(tabla1, ZM
# Se guardan los totales de las matrices reducidas
wb <- createWorkbook()
for(i in 1:length(ZM)){
addWorksheet(wb, paste(ZM_CF[i]))
writeData(wb, i, totales[[i]], colNames = TRUE, startCol = 1)
writeData(wb, i, porcentajes[[i]], colNames = TRUE, startCol = 5)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab nivel intramunicipal_Reduccion_Totales.xlsx"),
overwrite = TRUE)
} tabla1 <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel intramunicipal.RDS"))
#paleta <- colorRampPalette(pals::ocean.matter(100))(50)
paleta <- c("#170A3A", "#7D1D6B", "#871D62","#952664", "#AE2A5E", "#CA3F56", "#DB5854", "#E45B2F", "#E86328", "#ED8861", "#F4A472", "#F4CA72", "#E8B94B")
tabla2 <- color_chord_diagram(tabla1, ZM_CF = ZM_CF, paleta)file = "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab desagregado por ZM (Intramunicipal).pdf"
## Gráficos a nivel municipal
chord_diagram_graph(file = file,
width = 15,
height = 10,
family = "Montserrat Medium",
paleta = paleta,
ZM_CF = ZM_CF,
tabla1,
tabla2,
color_labels = "#170A3A",
margin = c(0, 0, 0, 0))Etiquetas
## Tomamos las Zonas Metropolitanas con más de 3 municipios con flujos migratorios
ZM_CF <- ZM_2020 %>%
group_by(CVE_ZM) %>%
summarise(Count = n()) %>%
filter(Count > 2) %>%
pull(CVE_ZM)
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn")
tabla1 <- lapply(1:length(ZM_CF), function(x){
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% ZM_CF[x]) %>%
mutate(NOM_MUN = paste(.$CVE_MUN, .$NOM_MUN)) %>%
pull(NOM_MUN)
tabla %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0)
}
)p <- lapply(1:length(ZM_CF), function(x){
tabla1[[x]] %>%
ggplot(aes(axis1 = rn,
axis2 = cn,
y = value), # c("value", "freq", "tasa")
reverse = FALSE,
na.rm = TRUE) +
geom_alluvium(aes(fill = rn),
curve_type = "quintic",
color = "transparent",
alpha = 0.85,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_stratum(aes(fill = cn),
color = "white",
alpha = 0.65,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 1, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 1, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = -.2,
min.segment.length = unit(1, "lines"),
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 2, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 2, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = .2,
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
theme_void() +
theme(plot.margin = margin(t = 1, r = 1.5, b = 1, l = 0, "cm"),
text = element_text(family = "montserrat"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 10, face = "bold", family = "montserrat"),
legend.key.size = unit(0.5, "cm"),
legend.text = element_text(size = 9, family = "montserrat"),
legend.position = c(1, .5)) +
scale_x_discrete(expand = c(-0.1, 0.35)) +
scale_fill_viridis_d(option = "A", end = 0.9, begin = 0.2) +
guides(fill = guide_legend(ncol = 1, na.translate = F)) +
labs(fill = "",
color = "")
}
)
path = paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/GSankey de MTrab desagregado por ZM_Absolutos (Intramunicipal).pdf")
ggexport(list = p, width = 14, height = 10, dpi = 400, filename = path)load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intramunicipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(NOM_MUN)
################################################################################
################################## Filtro ######################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
################################## Filtro ######################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value < 60000) %>%
pull(rn)
################################################################################
tabla1 <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM | .$cn %in% ZM) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
mutate(rn = ifelse(.$rn %in% filtro,
stringr::str_wrap(paste0(substr(as.character(.$rn), 1, 3), " Otros municipios (", estados[as.numeric(substr(as.character(.$rn), 1, 3))], ")"), 30),
substr(.$rn, 2, nchar(.$rn))),
cn = ifelse(.$cn %in% filtro,
stringr::str_wrap(paste0(substr(as.character(.$cn), 1, 3), " Otros municipios (", estados[as.numeric(substr(as.character(.$cn), 1, 3))], ")"), 30),
substr(.$cn, 2, nchar(.$cn)))) %>%
filter(value > 0) %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")# Paleta de colores
groupColors <- paste0(rev(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1)))))), "7F")
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab de ZMVM (Intramunicipal).pdf"),
width = 7, height = 7,
family = "Montserrat Medium",
fallback_resolution = 400,
onefile = TRUE)
circos.clear()
circos.par(start.degree = 90,
clock.wise = TRUE,
gap.degree = 3,
track.margin = c(-0.2, 0.2),
points.overflow.warning = FALSE)
par(mar = rep(1.5, 4))
# Paleta de colores
groupColors <- setNames(rev(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1)))))),
nm = unique(c(colnames(tabla1), rownames(tabla1))))
chordDiagram(x = tabla1 %>% as.matrix(),
grid.col = groupColors,
order = union(rownames(tabla1), colnames(tabla1)),
keep.diagonal = FALSE,
symmetric = FALSE,
scale = FALSE,
transparency = 0.25,
directional = 1,
direction.type = c("arrows", "diffHeight"),
diffHeight = -0.04,
annotationTrack = "grid",
annotationTrackHeight = mm_h(c(3)), # ancho borde
preAllocateTracks = 1,
big.gap = 40,
link.arr.type = "big.arrow",
link.lwd = 0.5,
link.visible = TRUE,
link.largest.ontop = FALSE)
# Add text and axis
circos.trackPlotRegion(track.index = 1,
track.height = 0.05,
bg.border = NA,
panel.fun = function(x, y) {
xlim = get.cell.meta.data("xlim")
ylim = get.cell.meta.data("ylim")
sector.name = get.cell.meta.data("sector.index")
# Add names to the sector.
circos.text(x = mean(xlim),
y = ylim[1] + 0.2, #Ajusta a las etiquetas del origen
labels = sector.name,
facing = "clockwise",
niceFacing = TRUE,
adj = c(-0.01, 0.5), #Ajuste de las etiquetas (x, y)
cex = fontsize(7),
col = "#170A3A",
font = 1)
# Add graduation on axis
circos.axis(h = "top",
labels = c(0, 10, 20, 50, 100, 200, 300, 400, 500, 1000, seq(1000, 20000, by = 100000)),
major.tick.length = 0.2,
minor.ticks = 2,
labels.cex = fontsize(5),
sector.index = sector.name,
track.index = 2,
labels.niceFacing = TRUE,
labels.pos.adjust = c(0, 0.8))
}
)
dev.off()load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intramunicipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(NOM_MUN)
################################################################################
################################## Filtro ######################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
################################## Filtro ######################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value < 60000) %>%
pull(rn)
################################################################################
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM | .$cn %in% ZM) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
mutate(rn = case_when(.$rn %in% filtro ~ stringr::str_wrap(paste(substr(as.character(.$rn), 2, 3), "Otros municipios (", estados[as.numeric(substr(as.character(.$rn), 1, 3))], ")"), 30),
.$rn %nin% filtro ~ substr(.$rn, 2, nchar(.$rn))),
cn = case_when(.$cn %in% filtro ~ stringr::str_wrap(paste(substr(as.character(.$cn), 2, 3), "Otros municipios (", estados[as.numeric(substr(as.character(.$cn), 1, 3))], ")"), 30),
.$cn %nin% filtro ~substr(.$cn, 2, nchar(.$cn)))) %>%
filter(value > 0)
tabla1 <- tabla %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")
# Grupo 1
grupo1 <- tabla %>%
filter(substr(.$rn, 1, 2) == "09") %>%
pull(rn) %>%
unique()
# Grupo 2
grupo2 <- tabla %>%
filter(substr(.$rn, 1, 2) == "15") %>%
pull(rn) %>%
unique()
# Grupo 3
grupo3 <- tabla %>%
filter(substr(.$rn, 1, 2) == "13") %>%
pull(rn) %>%
unique()
## Se guardan las matrices de movilidad laboral para analizarlos después.
tabla <- tabla1 %>%
as.data.frame() %>%
adorn_totals(c("row", "col"),
fill = "-",
na.rm = TRUE,
,,,,contains(colnames(tabla1)))
wb <- createWorkbook()
addWorksheet(wb, "ZMVM")
writeData(wb, 1, tabla, colNames = TRUE, rowNames = TRUE)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab de ZMVM a nivel intramunicipal_Reduccion.xlsx"),
overwrite = TRUE)# Paleta de colores
groupColors <- paste0(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1))))), "7F")
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab de ZMVM_grupos (Intramunicipal).pdf"),
width = 10, height = 10,
family = "Montserrat Medium",
fallback_resolution = 400,
onefile = TRUE)
circos.clear()
circos.par(start.degree = 90,
clock.wise = TRUE,
gap.degree = 3,
track.margin = c(-0.2, 0.2),
points.overflow.warning = FALSE)
par(mar = rep(0, 4))
# Paleta de colores
groupColors <- setNames(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1))))),
nm = unique(c(colnames(tabla1), rownames(tabla1))))
chordDiagram(x = tabla1 %>% as.matrix(),
grid.col = groupColors,
order = union(rownames(tabla1), colnames(tabla1)),
keep.diagonal = FALSE,
symmetric = FALSE,
scale = FALSE,
transparency = 0.25,
directional = 1,
direction.type = c("arrows", "diffHeight"),
diffHeight = -0.04,
annotationTrack = "grid",
annotationTrackHeight = mm_h(c(3)), # ancho borde
preAllocateTracks = 1,
big.gap = 40,
link.arr.type = "big.arrow",
link.lwd = 0.5,
link.visible = TRUE,
link.largest.ontop = FALSE)
# Add text and axis
circos.trackPlotRegion(track.index = 1,
track.height = 0.05,
bg.border = NA,
panel.fun = function(x, y) {
xlim = get.cell.meta.data("xlim")
ylim = get.cell.meta.data("ylim")
sector.name = get.cell.meta.data("sector.index")
# Add names to the sector.
circos.text(x = mean(xlim),
y = ylim[1] + 1, #Ajusta a las etiquetas del origen
labels = sector.name,
facing = "clockwise",
niceFacing = TRUE,
adj = c(-0.01, 0.5), #Ajuste de las etiquetas (x, y)
cex = fontsize(9),
col = "#170A3A",
font = 1)
# Add graduation on axis
circos.axis(h = "top",
labels = c(0, 10, 20, 50, 100, 200, 300, 400, 500, 1000, seq(1000, 20000, by = 100000)),
major.tick.length = 0.2,
minor.ticks = 2,
labels.cex = fontsize(7),
sector.index = sector.name,
track.index = 2,
labels.niceFacing = TRUE,
labels.pos.adjust = c(0, 0.8))
}
)
highlight.sector(grupo1,
track.index = 1,
col = groupColors[1],
text = "Ciudad de México",
cex = 1.5,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0), niceFacing = TRUE)
highlight.sector(grupo2,
track.index = 1,
col = groupColors[15],
text = "México",
cex = 1.5,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0),
niceFacing = TRUE)
highlight.sector(grupo3,
track.index = 1,
col = groupColors[20],
text = "Hidalgo",
cex = 1,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0),
niceFacing = TRUE)
dev.off()Etiquetas
etiquetas <- lapply(1, function(x){
orden <- str_sort(unique(c(colnames(tabla1), rownames(tabla1))), numeric = TRUE)
p <- tabla1 %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
as.data.frame() %>%
mutate(rn = str_wrap(.$rn, 100),
cn = str_wrap(.$cn, 100)) %>%
ggplot() +
geom_bar(aes(x = value, fill = as.character(rn, orden))) +
geom_bar(aes(x = value, fill = as.character(cn, orden))) +
theme(plot.margin = margin(t = 1, r = 1.5, b = 1, l = 0, "cm"),
text = element_text(family = "Montserrat Medium"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 9, face = "bold", family = "Montserrat Medium"),
legend.key.size = unit(0.4, "cm"),
legend.spacing.y = unit(0.4, "cm"),
legend.text = element_text(size = 7, family = "Montserrat Medium"),
legend.title = element_text(size = 8 , family = "Montserrat Medium")) +
scale_fill_manual(values = colorRampPalette(paleta)(max(ncol(tabla1), nrow(tabla1)))) +
guides(fill = guide_legend(ncol = 1)) +
guides(fill = guide_legend(ncol = 1)) +
labs(fill = "ZM del Valle de México",
color = "ZM del Valle de México")
leg <- get_legend(p)
as_ggplot(leg)
})
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Etiquetas ZMVM a nivel intramunicipal.pdf"),
width = 7, height = 8,
fallback_resolution = 400,
family = "montserrat", onefile = TRUE)
for(i in 1){
print(etiquetas[i])
}
dev.off()Zona Metropolitana del Valle de México
(ZMVM)
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = paste(.$CVE_MUN, .$NOM_MUN)) %>%
pull(NOM_MUN)
##########################################################################################
######################################## Filtro ##########################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
######################################## Filtro ##########################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
mutate(value = Inmigrantes + Emigrantes) %>%
filter(value < 30000) %>%
pull(rn)
#########################################################################################
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
mutate(rn = ifelse(.$rn %in% filtro, stringr::str_wrap(paste0(substr(as.character(.$rn), 1, 3), " Otros municipios(", estados[as.numeric(substr(as.character(.$rn), 1, 3))], ")"), 20), .$rn),
cn = ifelse(.$cn %in% filtro, stringr::str_wrap(paste0(substr(as.character(.$cn), 1, 3), " Otros municipios(", estados[as.numeric(substr(as.character(.$cn), 1, 3))], ")"), 20) , .$cn)) %>%
filter(value > 0)
p <- tabla %>%
ggplot(aes(axis1 = rn,
axis2 = cn,
y = value), # c("value", "freq", "tasa")
reverse = FALSE,
na.rm = TRUE) +
geom_alluvium(aes(fill = rn),
curve_type = "quintic",
color = "transparent",
alpha = 0.85,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_stratum(aes(fill = cn),
color = "white",
alpha = 0.65,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 1, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 1, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = -.23,
min.segment.length = unit(1, "lines"),
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 2, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 2, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = .23,
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
theme_void() +
theme(plot.margin = margin(t = 1, r = 4, b = 1, l = 0, "cm"),
text = element_text(family = "montserrat"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 10, face = "bold", family = "montserrat"),
legend.key.size = unit(0.5, "cm"),
legend.text = element_text(size = 9, family = "montserrat"),
legend.position = c(0.999, .5)) +
scale_x_discrete(expand = c(-0.1, 0.5)) +
scale_fill_viridis_d(option = "A", end = 0.9, begin = 0.2) +
guides(fill = guide_legend(ncol = 1, na.translate = F)) +
labs(fill = "",
color = "")
path = paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/GSankey de MTrab de la ZMVM (Intramunicipal).pdf")
ggexport(p, width = 20, height = 12, dpi = 400, filename = path)Se realizan cálculos generales de migración
- Residentes
- Inmigrantes
- Emigrantes
- % Inmigrantes
- % Emigrante
- Migración bruta
- Migración Neta
- % Tasa de migración bruta
- % Tasa de migración neta
Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora
################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
as.data.frame() %>%
group_by(CVE_MUN) %>%
summarise(Pob.Total = sum(FACTOR))
################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
as.data.frame() %>%
mutate(EDAD = as.numeric(.$EDAD)) %>%
subset((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
group_by(CVE_MUN) %>%
summarise(Pob.ocupada = sum(FACTOR))
################################################################################
########################### Residentes #########################################
load(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intramunicipal 2020.RData"))
Residentes <- Migrantes %>%
rownames_to_column() %>%
gather(CVE_MUN, Value, -rowname)%>%
filter(rowname == CVE_MUN) %>%
select(-rowname) %>%
droplevels() %>%
rename("Residentes" = "Value")
################################################################################
############################### Inmigrantes ####################################
## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
as_tibble() %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
group_by(CVE_MUN) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
################################################################################
############################### Emigrantes #####################################
## Población que entra a la entidad para trabajar
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
as_tibble() %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
group_by(CVE_MUN_TRABAJO) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE)) %>%
rename("CVE_MUN" = "CVE_MUN_TRABAJO")
tabla <- Pob.Total %>%
left_join(., Pob.ocupada, by = c("CVE_MUN")) %>%
left_join(., Residentes, by = c("CVE_MUN")) %>%
left_join(., Inmigrantes, by = c("CVE_MUN")) %>%
left_join(., Emigrantes, by = c("CVE_MUN")) %>%
mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
Mig.Bruta = .$Inmigrantes + .$Emigrantes,
Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Mig = Tasa.Inmig - Tasa.Emig,
Eficacia = Mig.Neta - Mig.Bruta)
write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Intramunicipal).xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Intramunicipal).RData"))| Indicadores de movilidad laboral | |||||||||||
| Zonas Metropolitanas | |||||||||||
| Clave del municipio | Pob.Total | Pob.ocupada | Residentes | Inmigrantes | Emigrantes | Mig.Neta | Mig.Bruta | Tasa.Inmig | Tasa.Emig | Tasa.Mig | Eficacia |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||
Se utiliza la paquetería survey para poder trabajar con
la muestra del cuestionario ampliado, en la cual se selecciona a la
población de 5 años y más.
options(survey.lonely.psu = "adjust")
MC <- mydata %>%
select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO,
EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
# Se genera una indicadora de zm
mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
# Se clasifican a los migrantes internos
mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
)) %>%
filter((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
filter(CVE_MUN_TRABAJO %in% municipios & .$I_ZM %in% "No pertenecen a la Zona Metropolitana") %>%
svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)
saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_intermunicipal.RDS"))Se genera una matriz cruzada del lugar de residencia hace 5 años a
nivel municipal, utilizando la función svytable de la
paquetería survey.
MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_intermunicipal.RDS"))
Migrantes <- svytable(~CVE_MUN_TRABAJO + CVE_MUN, design = MC)Se genera la matriz cuadrada y se le asignan las etiquetas de municipios.
Migrantes <- Migrantes %>%
as.data.frame() %>%
expss::cross_cases(CVE_MUN, CVE_MUN_TRABAJO, weight = Freq) %>%
as.data.frame() %>%
rename("CVE_MUN" = "row_labels") %>%
arrange(CVE_MUN) %>%
slice(-1)
rownames <- Migrantes %>%
mutate(CVE_MUN = substr(.$CVE_MUN, 9, 16)) %>%
pull(CVE_MUN)
colnames <- names(Migrantes) %>%
as.data.frame() %>%
slice(-1) %>%
rename("CVE_MUN" = ".") %>%
mutate(`CVE_MUN` = substr(.$CVE_MUN, 17, 22)) %>%
pull(CVE_MUN)
# Se elimina la variable CVE_MUN
Migrantes <- Migrantes %>%
select(-CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
saveRDS(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.RDS"))
save(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.RData"))
require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "M.Intramunicipal")
writeData(wb, 1, Migrantes %>% as.data.frame() %>% tibble::rownames_to_column(var = "CVE_MUN"), colNames = TRUE)
saveWorkbook(wb, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.xlsx"), overwrite = TRUE)Matriz de movilidad laboral hace 5 años a nivel municipal, 2015 - 2020
| Matriz de movilidad laboral por zonas metropolitanas | |||||||||||||||||||||||||||||
| Nivel intermunicipal | |||||||||||||||||||||||||||||
| CVE_MUN | 001001 | 001002 | 001003 | 001004 | 001005 | 001006 | 001007 | 001008 | 001009 | 001010 | 001011 | 002001 | 002002 | 002003 | 002004 | 002005 | 003001 | 003002 | 003003 | 003008 | 003009 | 004001 | 004002 | 004003 | 004004 | 004005 | 004006 | 004007 | 004008 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||||||||||||||||||||
Se filtran los flujos migratorios que son exclusivos de los estados y que visualmente sean más interpretables.
load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
# Nombre de las Zonas Metropolitanas
NOM_ZM <- stringr::str_wrap(nom_zm, 100)
## Tomamos las Zonas Metropolitanas con más de 3 municipios que tienen flujos migratorios
#### Con filtro (CF)
ZM_CF <- ZM_2020 %>%
group_by(CVE_ZM) %>%
summarise(Count = n()) %>%
filter(Count >= 0) %>%
pull(CVE_ZM)
NOM_ZM_CF <- ZM_2020 %>%
filter(CVE_ZM %in% ZM_CF) %>%
distinct(CVE_ZM, NOM_ZM)
ZM <- lapply(1:length(ZM_CF), function(x){
ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% ZM_CF[x]) %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(NOM_MUN)
})
################################################################################
################################## Filtro ######################################
Inmigrantes <- Inmigrantes_function(ZM, Migrantes)
Emigrantes <- Emigrantes_function(ZM, Migrantes)
################################## Filtro ######################################
#p <- data.frame(ZM = ZM_CF,
# filtro_municipio = tabla_municipios,
# filtro_estado = tabla_estados)
#write.xlsx(p, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel intermunicipal.xlsx"), overwrite = TRUE)
#### Filtro de municipios
filtro_mig <- read.xlsx(paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel intermunicipal.xlsx"), colNames = TRUE) %>%
pull(filtro_municipio)
#### Filtro de estados
filtro_out <- read.xlsx(paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel intermunicipal.xlsx"), colNames = TRUE) %>%
pull(filtro_estado)
################################################################################
tabla1 <- lapply(1:length(ZM_CF), function(x){
# filtro de municipios de la ZM
filtro <- Inmigrantes[[x]] %>%
full_join(., Emigrantes[[x]], by = c("rn" = "cn")) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value > filtro_mig[x]) %>% ## Cambia el filtro de los municipios de la Zonas Metropolitanas
pull(rn)
# filtro de estados
filtro_est <- Inmigrantes[[x]] %>%
full_join(., Emigrantes[[x]], by = c("rn" = "cn")) %>%
filter(rn %nin% ZM[[x]]) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
mutate(rn = substr(.$rn, 1, 3)) %>%
group_by(rn) %>%
summarise(value = sum(value)) %>%
filter(value >= filtro_out[x]) %>%
pull(rn)
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM[[x]] | .$cn %in% ZM[[x]]) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM[[x]] | .$cn %in% ZM[[x]]), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM[[x]] & .$rn %in% filtro ~ substr(.$rn, 2, nchar(.$rn)),
.$rn %in% ZM[[x]] & .$rn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$rn, 1, 3))], "ZM"), 30),
.$rn %nin% ZM[[x]] & substr(.$rn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$rn, 1, 3))]), 30),
.$rn %nin% ZM[[x]] & substr(.$rn, 1, 3) %nin% filtro_est ~ "Otros estados"),
cn = case_when(.$cn %in% ZM[[x]] & .$cn %in% filtro ~ substr(.$cn, 2, nchar(.$cn)),
.$cn %in% ZM[[x]] & .$cn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$cn, 1, 3))], "ZM"), 30),
.$cn %nin% ZM[[x]] & substr(.$cn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$cn, 1, 3))]), 30),
.$cn %nin% ZM[[x]] & substr(.$cn, 1, 3) %nin% filtro_est ~ "Otros estados")) %>%
filter(value > 0) %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")
}
)
## Se sacan los flujos migratorios que pertencen a otros estados
#tabla_estados <- sapply(1:length(ZM_CF), function(i){
# tabla1[[i]] %>%
# as.data.frame() %>%
# adorn_totals(c("row", "col"),
# fill = "-",
# na.rm = TRUE,
# ,,,,contains(colnames(tabla1[[i]]))) %>%
# select(`Otros estados`) %>%
# slice(nrow(.)) %>%
# mutate(`Otros estados` = .$`Otros estados`/10) %>%
# pull(`Otros estados`)
#})
## Se sacan los flujos migratorios que pertencen a otros municipios
#tabla_municipios <- sapply(1:length(ZM_CF), function(i){
# p <- tabla1[[i]] %>%
# as.data.frame() %>%
# select(-c(`Otros estados`)) %>%
# slice(-nrow(.))
# if(sum(p) == 0) {
# return(0)
# } else {
# p %>%
# adorn_totals(c("row", "col"),
# fill = "-",
# na.rm = TRUE,
# ,,,,contains(colnames(tabla1[[i]]))) %>%
# slice(nrow(.)) %>%
# mutate(Total = .$Total/100) %>%
# pull(Total)
# }
#})
## Se guardan las matrices de movilidad laboral para analizarlos después.
wb <- createWorkbook()
for(i in 1:length(ZM)){
tabla <- tabla1[[i]] %>%
as.data.frame() %>%
adorn_totals(c("row", "col"),
fill = "-",
na.rm = TRUE,
,,,,contains(colnames(tabla1[[i]])))
addWorksheet(wb, paste(ZM_CF[i]))
writeData(wb, i, tabla, colNames = TRUE, rowNames = TRUE)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel intermunicipal_Reduccion.xlsx"),
overwrite = TRUE)
}
saveRDS(tabla1, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel intermunicipal.RDS"))tabla1 <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel intermunicipal.RDS"))
total_tablas <- totales(tabla1, ZM)
porcentajes_tablas <- porcentajes(tabla1, ZM)
# Se guardan los totales de las matrices reducidas
wb <- createWorkbook()
for(i in 1:length(ZM)){
addWorksheet(wb, paste(ZM_CF[i]))
writeData(wb, i, totales[[i]], colNames = TRUE, startCol = 1)
writeData(wb, i, porcentajes[[i]], colNames = TRUE, startCol = 5)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel intermunicipal_Reduccion_Totales.xlsx"),
overwrite = TRUE)
}tabla1 <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Tabla MTrab a nivel intermunicipal.RDS"))
#paleta <- colorRampPalette(pals::ocean.matter(100))(50)
paleta <- c("#170A3A", "#7D1D6B", "#871D62","#952664", "#AE2A5E", "#CA3F56", "#DB5854", "#E45B2F", "#E86328", "#ED8861", "#F4A472", "#F4CA72", "#E8B94B")
tabla2 <- color_chord_diagram(tabla1, ZM_CF = ZM_CF, paleta)file = "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab desagregado por ZM (Intermunicipal).pdf"
## Gráficos a nivel municipal
chord_diagram_graph(file = file,
width = 15,
height = 10,
family = "Montserrat Medium",
paleta = paleta,
ZM_CF = ZM_CF,
tabla1,
tabla2,
color_labels = "#170A3A",
margin = c(0, 0, 0, 0))Etiquetas
## Tomamos las Zonas Metropolitanas con más de 3 municipios con flujos migratorios
ZM_CF <- ZM_2020 %>%
group_by(CVE_ZM) %>%
summarise(Count = n()) %>%
filter(Count > 2) %>%
pull(CVE_ZM)
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character)
tabla1 <- lapply(1:length(ZM_CF), function(x){
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% ZM_CF[x]) %>%
mutate(NOM_MUN = paste(.$CVE_MUN, .$NOM_MUN)) %>%
pull(NOM_MUN)
tabla %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM ~ .$rn,
.$rn %nin% ZM ~ paste0(nom_estados[as.numeric(substr(.$rn, 1, 3))])),
cn = case_when(.$cn %in% ZM ~ .$cn,
.$cn %nin% ZM ~ paste0(nom_estados[as.numeric(substr(.$cn, 1, 3))]))) %>%
filter(value > 0)
}
) p <- lapply(1:length(ZM_CF), function(x){
tabla1[[x]] %>%
ggplot(aes(axis1 = rn,
axis2 = cn,
y = value), # c("value", "freq", "tasa")
reverse = FALSE,
na.rm = TRUE) +
geom_alluvium(aes(fill = rn),
curve_type = "quintic",
color = "transparent",
alpha = 0.85,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_stratum(aes(fill = cn),
color = "white",
alpha = 0.65,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 1, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 1, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = -.2,
min.segment.length = unit(1, "lines"),
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 2, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 2, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = .2,
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
theme_void() +
theme(plot.margin = margin(t = 1, r = 1.5, b = 1, l = 0, "cm"),
text = element_text(family = "montserrat"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 10, face = "bold", family = "montserrat"),
legend.key.size = unit(0.5, "cm"),
legend.text = element_text(size = 9, family = "montserrat"),
legend.position = c(1, .5)) +
scale_x_discrete(expand = c(-0.1, 0.35)) +
scale_fill_viridis_d(option = "A", end = 0.9, begin = 0.2) +
guides(fill = guide_legend(ncol = 1, na.translate = F)) +
labs(fill = "",
color = "")
}
)
path = paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/GSankey de MTrab desagregado por ZM_Absolutos (Intermunicipal).pdf")
ggexport(list = p, width = 14, height = 10, dpi = 400, filename = path)load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(NOM_MUN)
################################################################################
################################## Filtro ######################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
################################## Filtro ######################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
filter(rn %in% ZM) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value > 2000) %>%
pull(rn)
filtro_est <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
filter(rn %nin% ZM) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
mutate(rn = substr(.$rn, 1, 3)) %>%
group_by(rn) %>%
summarise(value = sum(value)) %>%
filter(value > 4000) %>%
pull(rn)
################################################################################
tabla1 <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM | .$cn %in% ZM) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM| .$cn %in% ZM), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM & .$rn %in% filtro ~ substr(.$rn, 2, nchar(.$rn)),
.$rn %in% ZM & .$rn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$rn, 1, 3))], "ZMVM"), 50),
.$rn %nin% ZM & substr(.$rn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$rn, 1, 3))]), 50),
.$rn %nin% ZM & substr(.$rn, 1, 3) %nin% filtro_est ~ "Otros estados"),
cn = case_when(.$cn %in% ZM & .$cn %in% filtro ~ substr(.$cn, 2, nchar(.$cn)),
.$cn %in% ZM & .$cn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$cn, 1, 3))], "ZMVM"), 50),
.$cn %nin% ZM & substr(.$cn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$cn, 1, 3))]), 50),
.$cn %nin% ZM & substr(.$cn, 1, 3) %nin% filtro_est ~ "Otros estados")) %>%
filter(value > 0) %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn") # Grupo de colores
groupColors <- paste0(rev(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1)))))), "7F")
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab de ZMVM (Intermunicipal).pdf"),
width = 7, height = 7,
family = "Montserrat Medium",
fallback_resolution = 400,
onefile = TRUE)
circos.clear()
circos.par(start.degree = 90,
clock.wise = TRUE,
gap.degree = 3,
track.margin = c(-0.2, 0.2),
points.overflow.warning = FALSE)
par(mar = rep(1.5, 4))
# Paleta de colores
groupColors <- setNames(rev(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1)))))),
nm = unique(c(colnames(tabla1), rownames(tabla1))))
chordDiagram(x = tabla1 %>% as.matrix(),
grid.col = groupColors,
order = union(rownames(tabla1), colnames(tabla1)),
keep.diagonal = FALSE,
symmetric = FALSE,
scale = FALSE,
transparency = 0.25,
directional = 1,
direction.type = c("arrows", "diffHeight"),
diffHeight = -0.04,
annotationTrack = "grid",
annotationTrackHeight = mm_h(c(3)), # ancho borde
preAllocateTracks = 1,
big.gap = 40,
link.arr.type = "big.arrow",
link.lwd = 0.5,
link.visible = TRUE,
link.largest.ontop = FALSE)
# Add text and axis
circos.trackPlotRegion(track.index = 1,
track.height = 0.05,
bg.border = NA,
panel.fun = function(x, y) {
xlim = get.cell.meta.data("xlim")
ylim = get.cell.meta.data("ylim")
sector.name = get.cell.meta.data("sector.index")
# Add names to the sector.
circos.text(x = mean(xlim),
y = ylim[1] + 0.2, #Ajusta a las etiquetas del origen
labels = sector.name,
facing = "clockwise",
niceFacing = TRUE,
adj = c(-0.01, 0.5), #Ajuste de las etiquetas (x, y)
cex = fontsize(7),
col = "#170A3A",
font = 1)
# Add graduation on axis
circos.axis(h = "top",
labels = c(0, 10, 20, 50, 100, 200, 300, 400, 500, 1000, seq(1000, 20000, by = 100000)),
major.tick.length = 0.2,
minor.ticks = 2,
labels.cex = fontsize(5),
sector.index = sector.name,
track.index = 2,
labels.niceFacing = TRUE,
labels.pos.adjust = c(0, 0.8))
}
)
dev.off()load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN %>% select(CVE_MUN, NOM_MUN)) %>%
mutate(CVE_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = stringr::str_wrap(paste(.$CVE_MUN, .$NOM_MUN), 50)) %>%
pull(NOM_MUN)
################################################################################
################################## Filtro ######################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
################################## Filtro ######################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
filter(rn %in% ZM) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
filter(value > 2000) %>%
pull(rn)
filtro_est <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
filter(rn %nin% ZM) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
mutate(rn = substr(.$rn, 1, 3)) %>%
group_by(rn) %>%
summarise(value = sum(value)) %>%
filter(value > 4000) %>%
pull(rn)
################################################################################
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM | .$cn %in% ZM) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM| .$cn %in% ZM), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM & .$rn %in% filtro ~ substr(.$rn, 2, nchar(.$rn)),
.$rn %in% ZM & .$rn %nin% filtro ~ str_wrap(paste(substr(estados[as.numeric(substr(.$rn, 1, 3))], 2, 3), "ZMVM"), 100),
.$rn %nin% ZM & substr(.$rn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$rn, 1, 3))]), 100),
.$rn %nin% ZM & substr(.$rn, 1, 3) %nin% filtro_est ~ "Otros estados"),
cn = case_when(.$cn %in% ZM & .$cn %in% filtro ~ substr(.$cn, 2, nchar(.$cn)),
.$cn %in% ZM & .$cn %nin% filtro ~ str_wrap(paste(substr(estados[as.numeric(substr(.$cn, 1, 3))], 2, 3), "ZMVM"), 100),
.$cn %nin% ZM & substr(.$cn, 1, 3) %in% filtro_est ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$cn, 1, 3))]), 100),
.$cn %nin% ZM & substr(.$cn, 1, 3) %nin% filtro_est ~ "Otros estados")) %>%
filter(value > 0)
tabla1 <- tabla %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")
# Grupo 1
grupo1 <- tabla %>%
filter(substr(.$rn, 1, 2) == "09") %>%
pull(rn) %>%
unique()
# Grupo 2
grupo2 <- tabla %>%
filter(substr(.$rn, 1, 2) == "15") %>%
pull(rn) %>%
unique()
# Grupo 3
grupo3 <- tabla %>%
filter(substr(.$rn, 1, 2) == "13") %>%
pull(rn) %>%
unique()
# Grupo 4
grupo4 <- tabla %>%
filter(substr(.$rn, 1, 2) %nin% c("09", "15", "13")) %>%
pull(rn) %>%
unique()
## Se guardan las matrices de movilidad laboral para analizarlos después.
tabla <- tabla1 %>%
as.data.frame() %>%
adorn_totals(c("row", "col"),
fill = "-",
na.rm = TRUE,
,,,,contains(colnames(tabla1)))
wb <- createWorkbook()
addWorksheet(wb, "ZMVM")
writeData(wb, 1, tabla, colNames = TRUE, rowNames = TRUE)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab de ZMVM a nivel intermunicipal_Reduccion.xlsx"),
overwrite = TRUE)# Paleta de colores
groupColors <- paste0(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1))))), "7F")
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab de ZMVM_grupos (Intermunicipal).pdf"),
width = 10, height = 10,
family = "Montserrat Medium",
fallback_resolution = 400,
onefile = TRUE)
circos.clear()
circos.par(start.degree = 90,
clock.wise = TRUE,
gap.degree = 3,
track.margin = c(-0.2, 0.2),
points.overflow.warning = FALSE)
par(mar = rep(0, 4))
# Paleta de colores
groupColors <- setNames(colorRampPalette(paleta)(length(unique(c(colnames(tabla1), rownames(tabla1))))),
nm = unique(c(colnames(tabla1), rownames(tabla1))))
chordDiagram(x = tabla1 %>% as.matrix(),
grid.col = groupColors,
order = union(rownames(tabla1), colnames(tabla1)),
keep.diagonal = FALSE,
symmetric = FALSE,
scale = FALSE,
transparency = 0.25,
directional = 1,
direction.type = c("arrows", "diffHeight"),
diffHeight = -0.04,
annotationTrack = "grid",
annotationTrackHeight = mm_h(c(3)), # ancho borde
preAllocateTracks = 1,
big.gap = 40,
link.arr.type = "big.arrow",
link.lwd = 0.5,
link.visible = TRUE,
link.largest.ontop = FALSE)
# Add text and axis
circos.trackPlotRegion(track.index = 1,
track.height = 0.05,
bg.border = NA,
panel.fun = function(x, y) {
xlim = get.cell.meta.data("xlim")
ylim = get.cell.meta.data("ylim")
sector.name = get.cell.meta.data("sector.index")
# Add names to the sector.
circos.text(x = mean(xlim),
y = ylim[1] + 1, #Ajusta a las etiquetas del origen
labels = sector.name,
facing = "clockwise",
niceFacing = TRUE,
adj = c(-0.01, 0.5), #Ajuste de las etiquetas (x, y)
cex = fontsize(9),
col = "#170A3A",
font = 1)
# Add graduation on axis
circos.axis(h = "top",
labels = c(0, 10, 20, 50, 100, 200, 300, 400, 500, 1000, seq(1000, 20000, by = 100000)),
major.tick.length = 0.2,
minor.ticks = 2,
labels.cex = fontsize(7),
sector.index = sector.name,
track.index = 2,
labels.niceFacing = TRUE,
labels.pos.adjust = c(0, 0.8))
}
)
highlight.sector(grupo1,
track.index = 1,
col = groupColors[1],
text = "Ciudad de México",
cex = 1.5,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0), niceFacing = TRUE)
highlight.sector(grupo2,
track.index = 1,
col = groupColors[15],
text = "México",
cex = 1.5,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0),
niceFacing = TRUE)
highlight.sector(grupo3,
track.index = 1,
col = groupColors[20],
text = "Hidalgo",
cex = 1,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0),
niceFacing = TRUE)
highlight.sector(grupo4,
track.index = 1,
col = groupColors[30],
text = "Otro municipios",
cex = 1.5,
text.col = "white",
padding = c(-0.5, 0, -0.2, 0),
niceFacing = TRUE)
dev.off()Etiquetas
etiquetas <- lapply(1, function(x){
orden <- str_sort(unique(c(colnames(tabla1), rownames(tabla1))), numeric = TRUE)
p <- tabla1 %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
as.data.frame() %>%
mutate(rn = str_wrap(.$rn, 100),
cn = str_wrap(.$cn, 100)) %>%
ggplot() +
geom_bar(aes(x = value, fill = as.character(rn, orden))) +
geom_bar(aes(x = value, fill = as.character(cn, orden))) +
theme(plot.margin = margin(t = 1, r = 1.5, b = 1, l = 0, "cm"),
text = element_text(family = "Montserrat Medium"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 9, face = "bold", family = "Montserrat Medium"),
legend.key.size = unit(0.4, "cm"),
legend.spacing.y = unit(0.4, "cm"),
legend.text = element_text(size = 7, family = "Montserrat Medium"),
legend.title = element_text(size = 8 , family = "Montserrat Medium")) +
scale_fill_manual(values = colorRampPalette(paleta)(max(ncol(tabla1), nrow(tabla1)))) +
guides(fill = guide_legend(ncol = 1)) +
guides(fill = guide_legend(ncol = 1)) +
labs(fill = "ZM del Valle de México",
color = "ZM del Valle de México")
leg <- get_legend(p)
as_ggplot(leg)
})
cairo_pdf(paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Etiquetas ZMVM a nivel intermunicipal.pdf"),
width = 7, height = 9,
fallback_resolution = 400,
family = "montserrat", onefile = TRUE)
for(i in 1){
print(etiquetas[i])
}
dev.off()Zona Metropolitana del Valle de México
(ZMVM)
load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN, by = c("CVE_MUN")) %>%
mutate(CVE_MUN = paste(.$CVE_MUN, .$NOM_MUN)) %>%
pull(CVE_MUN)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_MUN" = ".") %>%
left_join(., MUN, by = c("CVE_MUN")) %>%
mutate(CVE_MUN = paste(.$CVE_MUN, .$NOM_MUN)) %>%
pull(CVE_MUN)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
## Se toma como referencia a la Zona Metropolitana del Valle de México
ZM <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% "09.01") %>%
mutate(NOM_MUN = paste(.$CVE_MUN, .$NOM_MUN)) %>%
pull(NOM_MUN)
##########################################################################################
######################################## Filtro ##########################################
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(rn) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
filter(value > 0) %>%
group_by(cn) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE))
######################################## Filtro ##########################################
filtro <- Inmigrantes %>%
full_join(., Emigrantes, by = c("rn" = "cn")) %>%
mutate(value = Inmigrantes + Emigrantes) %>%
filter(rn %in% ZM) %>%
filter(value > 30000) %>%
pull(rn)
#########################################################################################
tabla <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM | .$cn %in% ZM), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM & .$rn %in% filtro ~ .$rn,
.$rn %in% ZM & .$rn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$rn, 1, 3))], "ZMVM"), 20),
.$rn %nin% ZM & .$rn %nin% filtro ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$rn, 1, 3))]), 20)),
cn = case_when(.$cn %in% ZM & .$cn %in% filtro ~ .$cn,
.$cn %in% ZM & .$cn %nin% filtro ~ str_wrap(paste(estados[as.numeric(substr(.$cn, 1, 3))], "ZMVM"), 20),
.$cn %nin% ZM & .$cn %nin% filtro ~ str_wrap(paste0(nom_estados[as.numeric(substr(.$cn, 1, 3))]), 20))) %>%
filter(value > 0)
p <- tabla %>%
ggplot(aes(axis1 = rn,
axis2 = cn,
y = value), # c("value", "freq", "tasa")
reverse = FALSE,
na.rm = TRUE) +
geom_alluvium(aes(fill = rn),
curve_type = "quintic",
color = "transparent",
alpha = 0.85,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_stratum(aes(fill = cn),
color = "white",
alpha = 0.65,
lwd = 0.001,
width = 1/5,
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 1, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 1, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = -.23,
min.segment.length = unit(1, "lines"),
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
geom_text_repel(aes(label = ifelse(after_stat(x) == 2, paste0(as.character(after_stat(stratum)), ": ", prettyNum(count, big.mark = " ")), ""),
fontface = ifelse(after_stat(x) == 2, 'bold', 'plain')),
stat = "stratum",
size = 3,
direction = "y",
nudge_x = .23,
force = 1,
force_pull = 0,
family = "montserrat",
reverse = FALSE) +
theme_void() +
theme(plot.margin = margin(t = 1, r = 4, b = 1, l = 0, "cm"),
text = element_text(family = "montserrat"),
axis.text = element_blank(),
axis.title = element_blank(),
strip.text = element_text(size = 10, face = "bold", family = "montserrat"),
legend.key.size = unit(0.5, "cm"),
legend.text = element_text(size = 9, family = "montserrat"),
legend.position = c(0.999, .5)) +
scale_x_discrete(expand = c(-0.1, 0.5)) +
scale_fill_viridis_d(option = "A", end = 0.9, begin = 0.2) +
guides(fill = guide_legend(ncol = 1, na.translate = F)) +
labs(fill = "",
color = "")
path = paste0(here::here(), "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/GSankey de MTrab de la ZMVM (Intermunicipal).pdf")
ggexport(p, width = 20, height = 12, dpi = 400, filename = path)Se realizan cálculos generales de migración
- Residentes
- Inmigrantes
- Emigrantes
- % Inmigrantes
- % Emigrante
- Migración bruta
- Migración Neta
- % Tasa de migración bruta
- % Tasa de migración neta
Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora
################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
as.data.frame() %>%
group_by(CVE_MUN) %>%
summarise(Pob.Total = sum(FACTOR))
################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
as.data.frame() %>%
mutate(EDAD = as.numeric(.$EDAD)) %>%
subset((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
group_by(CVE_MUN) %>%
summarise(Pob.ocupada = sum(FACTOR))
################################################################################
########################### Residentes #########################################
load(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.RData"))
Residentes <- Migrantes %>%
rownames_to_column() %>%
gather(CVE_MUN, Value, -rowname)%>%
filter(rowname == CVE_MUN) %>%
select(-rowname) %>%
droplevels() %>%
rename("Residentes" = "Value")
################################################################################
############################### Inmigrantes ####################################
## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
as_tibble() %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
group_by(CVE_MUN) %>%
summarise(Inmigrantes = sum(value, na.rm = TRUE))
################################################################################
############################### Emigrantes #####################################
## Población que entra a la entidad para trabajar
Emigrantes <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
as_tibble() %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
group_by(CVE_MUN_TRABAJO) %>%
summarise(Emigrantes = sum(value, na.rm = TRUE)) %>%
rename("CVE_MUN" = "CVE_MUN_TRABAJO")
tabla <- Pob.Total %>%
left_join(., Pob.ocupada, by = c("CVE_MUN")) %>%
left_join(., Residentes, by = c("CVE_MUN")) %>%
left_join(., Inmigrantes, by = c("CVE_MUN")) %>%
left_join(., Emigrantes, by = c("CVE_MUN")) %>%
mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
Mig.Bruta = .$Inmigrantes + .$Emigrantes,
Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Mig = Tasa.Inmig - Tasa.Emig,
Eficacia = Mig.Neta - Mig.Bruta)
write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Intermunicipal).xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Intermunicipal).RData"))| Indicadores de movilidad laboral | |||||||||||
| Zonas Metropolitanas | |||||||||||
| Clave del municipio | Pob.Total | Pob.ocupada | Residentes | Inmigrantes | Emigrantes | Mig.Neta | Mig.Bruta | Tasa.Inmig | Tasa.Emig | Tasa.Mig | Eficacia |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||
Se utiliza la paquetería survey para poder trabajar con
la muestra del cuestionario ampliado, en la cual se selecciona a la
población de 12 años y más.
options(survey.lonely.psu = "adjust")
MC <- mydata %>%
select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO,
EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
# Se genera una indicadora de zm
mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
# Se clasifican a los migrantes internos
mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
)) %>%
filter((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
filter(CVE_MUN_TRABAJO %in% municipios) %>%
svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)
saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_metropolitana.RDS"))Se genera una matriz cruzada del lugar de residencia hace 5 años a
nivel municipal, utilizando la función svytable de la
paquetería survey.
MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_metropolitana.RDS"))
Migrantes <- svytable(~CVE_ZM_TRABAJO + CVE_ZM, design = MC)Se genera la matriz cuadrada y se le asignan las etiquetas de municipios.
Migrantes <- Migrantes %>%
as.data.frame() %>%
expss::cross_cases(CVE_ZM, CVE_ZM_TRABAJO, weight = Freq) %>%
as.data.frame() %>%
rename("CVE_ZM" = "row_labels") %>%
arrange(CVE_ZM) %>%
slice(-1)
rownames <- Migrantes %>%
mutate(CVE_ZM = substr(.$CVE_ZM, 8, 12)) %>%
pull(CVE_ZM)
colnames <- names(Migrantes) %>%
as.data.frame() %>%
slice(-1) %>%
rename("CVE_ZM" = ".") %>%
mutate(`CVE_ZM` = substr(.$CVE_ZM, 16, 20)) %>%
pull(CVE_ZM)
# Se elimina la variable CVE_ZM
Migrantes <- Migrantes %>%
select(-CVE_ZM)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
saveRDS(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de Movilidad laboral a nivel metropolitano 2020.RDS"))
save(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de Movilidad laboral a nivel metropolitano 2020.RData"))
require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "M.Metropolitano")
writeData(wb, 1, Migrantes %>% as.data.frame() %>% tibble::rownames_to_column(var = "CVE_ZM"), colNames = TRUE)
saveWorkbook(wb, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de Movilidad laboral a nivel metropolitano 2020.xlsx"), overwrite = TRUE)Matriz de Movilidad laboral hace 5 años a nivel municipal, 2015 - 2020
| Matriz de Movilidad laboral por zonas metropolitanas | |||||||||||||||||||||||||||||
| Nivel municipal | |||||||||||||||||||||||||||||
| CVE_ZM | 01.01 | 02.01 | 02.02 | 02.03 | 03.01 | 03.02 | 04.01 | 05.01 | 05.02 | 05.03 | 05.04 | 05.05 | 06.01 | 06.02 | 07.01 | 07.02 | 08.01 | 08.02 | 08.03 | 08.04 | 09.01 | 10.01 | 11.01 | 11.02 | 11.03 | 11.04 | 11.06 | 11.07 | 12.01 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||||||||||||||||||||
Se filtran los flujos migratorios que son exclusivos de los estados y que visualmente sean más interpretables.
load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de Movilidad laboral a nivel metropolitano 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_ZM" = ".") %>%
left_join(., ZM_2020 %>% select(CVE_ZM, NOM_ZM) %>% distinct(CVE_ZM, NOM_ZM), by = c("CVE_ZM")) %>%
mutate(CVE_ZM = stringr::str_wrap(paste(.$CVE_ZM, .$NOM_ZM), 100)) %>%
pull(CVE_ZM)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_ZM" = ".") %>%
left_join(., ZM_2020 %>% select(CVE_ZM, NOM_ZM) %>% distinct(CVE_ZM, NOM_ZM), by = c("CVE_ZM")) %>%
mutate(CVE_ZM = stringr::str_wrap(paste(.$CVE_ZM, .$NOM_ZM), 100)) %>%
pull(CVE_ZM)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
# Nombre de las Zonas Metropolitanas
NOM_ZM <- stringr::str_wrap(nom_zm, 100)
################################################################################
tabla1 <- lapply(1, function(x){
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
mutate(value = ifelse((.$rn != .$cn), value, 0)) %>%
filter(value > 0) %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")
}
)#paleta <- colorRampPalette(pals::ocean.matter(100))(50)
paleta <- c("#170A3A", "#7D1D6B", "#871D62","#952664", "#AE2A5E", "#CA3F56", "#DB5854", "#E45B2F", "#E86328", "#ED8861", "#F4A472", "#F4CA72", "#E8B94B")
tabla2 <- color_chord_diagram(tabla1, ZM_CF = 1, paleta)file = "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MTrab desagregado por ZM (metropolitano).pdf"
## Gráficos a nivel intramunicipal
chord_diagram_graph(file = file,
width = 10,
height = 10,
family <- "Montserrat Medium",
paleta = paleta,
ZM_CF = 1,
tabla1,
tabla2,
color_labels = "#170A3A",
margin = c(0, 0, 0, 0))Se filtran los flujos migratorios que son exclusivos de los estados y que visualmente sean más interpretables.
load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de Movilidad laboral a nivel metropolitano 2020.RData"))
rownames <- rownames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_ZM" = ".") %>%
left_join(., ZM_2020 %>% select(CVE_ZM, NOM_ZM) %>% distinct(CVE_ZM, NOM_ZM), by = c("CVE_ZM")) %>%
mutate(CVE_ZM = stringr::str_wrap(paste(.$CVE_ZM, .$NOM_ZM), 100)) %>%
pull(CVE_ZM)
colnames <- colnames(Migrantes) %>%
as.data.frame() %>%
rename("CVE_ZM" = ".") %>%
left_join(., ZM_2020 %>% select(CVE_ZM, NOM_ZM) %>% distinct(CVE_ZM, NOM_ZM), by = c("CVE_ZM")) %>%
mutate(CVE_ZM = stringr::str_wrap(paste(.$CVE_ZM, .$NOM_ZM), 100)) %>%
pull(CVE_ZM)
rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames
# Nombre de las Zonas Metropolitanas
ZM <- ZM_2020 %>%
select(CVE_ZM, NOM_ZM) %>%
distinct(CVE_ZM, NOM_ZM) %>%
mutate(CVE_ZM = stringr::str_wrap(paste(.$CVE_ZM, .$NOM_ZM), 100)) %>%
pull(CVE_ZM)
NOM_ZM_CF <- ZM_2020 %>%
filter(CVE_ZM %in% ZM_CF) %>%
distinct(CVE_ZM, NOM_ZM)
################################################################################
################################## Filtro ######################################
Inmigrantes <- Inmigrantes_function(ZM, Migrantes)
Emigrantes <- Emigrantes_function(ZM, Migrantes)
################################## Filtro ######################################
#p <- data.frame(ZM = ZM,
# filtro_zm = filtro_mig)
#write.xlsx(p, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel metropolitano.xlsx"), overwrite = TRUE)
#### Filtro de municipios
filtro_mig <- read.xlsx(paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Filtro a nivel metropolitano.xlsx"), colNames = TRUE) %>%
pull(filtro_zm)
################################################################################
tabla1 <- lapply(1:length(ZM), function(x){
# filtro de estados
filtro_zm <- Inmigrantes[[x]] %>%
full_join(., Emigrantes[[x]], by = c("rn" = "cn")) %>%
filter(rn %nin% ZM[[x]]) %>%
mutate(value = sum_row(Inmigrantes, Emigrantes, na.rm = TRUE)) %>%
mutate(rn = substr(.$rn, 1, 5)) %>%
group_by(rn) %>%
summarise(value = sum(value)) %>%
filter(value >= filtro_mig[x]) %>%
pull(rn)
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "rn") %>%
melt(., id.vars = "rn", variable.name = "cn") %>%
mutate_if(is.factor, as.character) %>%
filter(.$rn %in% ZM[[x]] | .$cn %in% ZM[[x]]) %>%
mutate(value = ifelse((.$rn != .$cn) & (.$rn %in% ZM[[x]] | .$cn %in% ZM[[x]]), value, 0)) %>%
mutate(rn = case_when(.$rn %in% ZM[[x]] ~ .$rn,
.$rn %nin% ZM[[x]] & substr(.$rn, 1, 5) %in% filtro_zm ~ .$rn,
.$rn %nin% ZM[[x]] & substr(.$rn, 1, 5) %nin% filtro_zm ~ "Otras zonas metropolitanas"),
cn = case_when(.$cn %in% ZM[[x]] ~ .$cn,
.$cn %nin% ZM[[x]] & substr(.$cn, 1, 5) %in% filtro_zm ~ .$cn,
.$cn %nin% ZM[[x]] & substr(.$cn, 1, 5) %nin% filtro_zm ~ "Otras zonas metropolitanas")) %>%
filter(value > 0) %>%
dcast(., rn ~ cn, value.var = "value", sum, na.rm = TRUE) %>%
column_to_rownames(., var = "rn")
}
)
## Se guardan las matrices de movilidad laboral para analizarlos después.
wb <- createWorkbook()
for(i in 1:length(ZM)){
tabla <- tabla1[[i]] %>%
as.data.frame() %>%
adorn_totals(c("row", "col"),
fill = "-",
na.rm = TRUE,
,,,,contains(colnames(tabla1[[i]])))
addWorksheet(wb, zm[i])
writeData(wb, i, tabla, colNames = TRUE, rowNames = TRUE)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel metropolitano_Reduccion.xlsx"),
overwrite = TRUE)
}
saveRDS(tabla1, paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel metropolitano.RDS"))tabla1 <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel metropolitano.RDS"))
total_tablas <- totales(tabla1, ZM)
porcentajes_tablas <- porcentajes(tabla1, ZM)
# Se guardan los totales de las matrices reducidas
wb <- createWorkbook()
for(i in 1:length(ZM)){
addWorksheet(wb, paste(ZM_CF[i]))
writeData(wb, i, totales[[i]], colNames = TRUE, startCol = 1)
writeData(wb, i, porcentajes[[i]], colNames = TRUE, startCol = 5)
saveWorkbook(wb,
file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel metropolitano_Reduccion_Totales.xlsx"),
overwrite = TRUE)
}tabla1 <- readRDS(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz MTrab a nivel metropolitano.RDS"))
#paleta <- colorRampPalette(pals::ocean.matter(100))(50)
paleta <- c("#170A3A", "#7D1D6B", "#871D62","#952664", "#AE2A5E", "#CA3F56", "#DB5854", "#E45B2F", "#E86328", "#ED8861", "#F4A472", "#F4CA72", "#E8B94B")
tabla2 <- color_chord_diagram(tabla1, ZM_CF = ZM_CF, paleta)file = "/Graficos/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/ChordDiagram de MEst desagregado por ZM (metropolitano)_individual.pdf"
## Gráficos a nivel municipal
chord_diagram_graph(file = file,
width = 8,
height = 8,
family = "Montserrat Medium",
paleta = paleta,
ZM_CF = ZM_CF,
tabla1,
tabla2,
color_labels = "#170A3A",
margin = c(0, 0, 0, 0))Etiquetas
Se realizan cálculos generales de migración
- Residentes
- Inmigrantes
- Emigrantes
- % Inmigrantes
- % Emigrante
- Migración bruta
- Migración Neta
- % Tasa de migración bruta
- % Tasa de migración neta
Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora
################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
as.data.frame() %>%
group_by(CVE_ZM) %>%
summarise(Pob.Total = sum(FACTOR))
################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
as.data.frame() %>%
mutate(EDAD = as.numeric(.$EDAD)) %>%
subset((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
group_by(CVE_ZM) %>%
summarise(Pob.ocupada = sum(FACTOR))
################################################################################
########################### Residentes #########################################
load(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel municipal 2020.RData"))
ZM <- lapply(1:length(zm), function(x){
ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% zm[x]) %>%
pull(CVE_MUN)
})
Residentes <- lapply(1:length(zm), function(x){
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN == CVE_MUN_TRABAJO) %>%
filter(CVE_MUN %in% ZM[[x]]) %>%
summarize(Residentes = sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
}
)
Residentes <- do.call(rbind.data.frame, Residentes)
################################################################################
############################### Inmigrantes ####################################
## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- lapply(1:length(zm), function(x){
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
filter(CVE_MUN %in% ZM[[x]]) %>%
summarize(Inmigrantes = sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
})
Inmigrantes <- do.call(rbind.data.frame, Inmigrantes)
################################################################################
############################### Emigrantes #####################################
## Población que entra a la entidad para trabajar
Emigrantes <- lapply(1:length(zm), function(x){
Migrantes %>%
t() %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
filter(CVE_MUN %in% ZM[[x]]) %>%
summarize(Emigrantes = sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
})
Emigrantes <- do.call(rbind.data.frame, Emigrantes)
tabla <- Pob.Total %>%
left_join(., Pob.ocupada, by = c("CVE_ZM")) %>%
left_join(., Residentes, by = c("CVE_ZM")) %>%
left_join(., Inmigrantes, by = c("CVE_ZM")) %>%
left_join(., Emigrantes, by = c("CVE_ZM")) %>%
mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
Mig.Bruta = .$Inmigrantes + .$Emigrantes,
Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Mig = Tasa.Inmig - Tasa.Emig,
Eficacia = Mig.Neta - Mig.Bruta)
write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Metropolitano) 2020.xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Metropolitano) 2020.RData"))| Indicadores de movilidad laboral | |||||||||||
| Zonas Metropolitanas | |||||||||||
| CVE_ZM | Pob.Total | Pob.ocupada | Residentes | Inmigrantes | Emigrantes | Mig.Neta | Mig.Bruta | Tasa.Inmig | Tasa.Emig | Tasa.Mig | Eficacia |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||
Se utiliza la paquetería survey para poder trabajar con
la muestra del cuestionario ampliado, en la cual se selecciona a la
población de 5 años y más.
options(survey.lonely.psu = "adjust")
MC <- mydata %>%
select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO,
EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
# Se genera una indicadora de zm
mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
# Se clasifican a los migrantes internos
mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
)) %>%
filter((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
filter(CVE_MUN_TRABAJO %in% municipios & .$I_ZM %in% "Pertenecen a la Zona Metropolitana") %>%
svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)
saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_intrametropolitana.RDS"))Se genera una matriz cruzada del lugar de residencia hace 5 años a
nivel municipal, utilizando la función svytable de la
paquetería survey.
MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_intrametropolitana.RDS"))
Migrantes <- svytable(~CVE_MUN_TRABAJO + CVE_MUN, design = MC)load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intramunicipal 2020.RData"))
MR <- NULL
for(i in 1:length(zm)){
tabla <- ZM_2020 %>%
select(CVE_ZM, CVE_MUN) %>%
filter(CVE_ZM %in% zm[i]) %>%
pull(CVE_MUN)
MR[[paste0(zm[i])]] <- Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
mutate_if(is.numeric, as.numeric) %>%
select(CVE_MUN, all_of(tabla)) %>%
filter(CVE_MUN %in% tabla)
}
# Se guardan en un objeto de R
saveRDS(MR, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matrices de MTrab a nivel intramunicipal por ZM2020.RDS"))
# Se genera un Excel con todas las matrices por ZM
wb <- createWorkbook()
for(i in 1:length(zm)){
addWorksheet(wb, paste0(zm[i]))
writeData(wb, i, MR[[paste0(zm[i])]] %>% as.data.frame())
saveWorkbook(wb,
file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2020/01_Migracion reciente/Matrices de MTrab a nivel intramunicipal por ZM2020.xlsx"),
overwrite = TRUE)
}Matriz de movilidad laboral hace 5 años en la Zona Metropolitana de Cuernavaca, 2015 - 2020
| Matriz de movilidad laboral a nivel intramunicipal | ||||||||||
| Zona Metropolitana de Cuernavaca | ||||||||||
| CVE_MUN | 017007 | 017008 | 017009 | 017011 | 017018 | 017020 | 017028 | 017029 | 017034 | 017035 |
|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | ||||||||||
Se realizan cálculos generales de migración
- Residentes
- Inmigrantes
- Emigrantes
- % Inmigrantes
- % Emigrante
- Migración bruta
- Migración Neta
- % Tasa de migración bruta
- % Tasa de migración neta
Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora
################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
as.data.frame() %>%
group_by(CVE_ZM) %>%
summarise(Pob.Total = sum(FACTOR))
################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
as.data.frame() %>%
mutate(EDAD = as.numeric(.$EDAD)) %>%
subset((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
group_by(CVE_ZM) %>%
summarise(Pob.ocupada = sum(FACTOR))
################################################################################
########################### Residentes #########################################
MR <- readRDS(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matrices de Mtrab a nivel intramunicipal por ZM2020.RDS"))
Residentes <- lapply(1:length(zm), function(x){
MR[[x]] %>%
as.data.frame() %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN == CVE_MUN_TRABAJO) %>%
summarize(Residentes = sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
}
)
Residentes <- do.call(rbind.data.frame, Residentes)
################################################################################
############################### Inmigrantes ####################################
## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- lapply(1:length(zm), function(x){
MR[[x]] %>%
as.data.frame() %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
summarize(Inmigrantes = sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
})
Inmigrantes <- do.call(rbind.data.frame, Inmigrantes)
################################################################################
############################### Emigrantes #####################################
## Población que entra a la entidad para trabajar
Emigrantes <- lapply(1:length(zm), function(x){
MR[[x]] %>%
tibble::column_to_rownames(var = "CVE_MUN") %>%
t() %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
summarize(Emigrantes= sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
})
Emigrantes <- do.call(rbind.data.frame, Emigrantes)
tabla <- Pob.Total %>%
left_join(., Pob.ocupada, by = c("CVE_ZM")) %>%
left_join(., Residentes, by = c("CVE_ZM")) %>%
left_join(., Inmigrantes, by = c("CVE_ZM")) %>%
left_join(., Emigrantes, by = c("CVE_ZM")) %>%
mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
Mig.Bruta = .$Inmigrantes + .$Emigrantes,
Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Mig = Tasa.Inmig - Tasa.Emig,
Eficacia = Mig.Neta - Mig.Bruta)
write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Intrametropolitano) 2020.xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Intrametropolitano) 2020.RData"))| Indicadores de movilidad laboral | |||||||||||
| Zonas Intrametropolitano | |||||||||||
| CVE_ZM | Pob.Total | Pob.ocupada | Residentes | Inmigrantes | Emigrantes | Mig.Neta | Mig.Bruta | Tasa.Inmig | Tasa.Emig | Tasa.Mig | Eficacia |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||
Se utiliza la paquetería survey para poder trabajar con
la muestra del cuestionario ampliado, en la cual se selecciona a la
población de 5 años y más.
options(survey.lonely.psu = "adjust")
MC <- mydata %>%
select(CVE_ENT, CVE_MUN, ENT_PAIS_RES_5A, MUN_RES_5A, CVE_MUN_TRABAJO, CVE_ZM, MC, CF, CVE_ZM_RES, M, EDAD, FACTOR, ESTRATO, UPM) %>%
# Se genera una indicadora de zm
mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
I_RES5A_ZM_2020 = ifelse(is.na(.$CVE_ZM_RES), '0', '1')) %>%
# Se clasifican a los migrantes internos
mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Residentes
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_RES5A_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_RES ~ "Pertenecen a la Zona Metropolitana", #Migrantes que residen en la misma zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_RES5A_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_RES ~ 'No pertenecen a la Zona Metropolitana', #Migrantes que residen en otra zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_RES5A_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Migrantes que residian fuera de la zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_RES5A_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Migrantes que residian dentro de una zona metropolitana
.$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_RES5A_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Migrantes que no residen en la zona metropolitana
)) %>%
filter(EDAD >= 5 & EDAD <= 130) %>%
filter(CVE_MUN_TRABAJO %in% municipios & .$I_ZM %in% "No pertenecen a la Zona Metropolitana") %>%
svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)
saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/MC_intermetropolitana.RDS"))Se realizan cálculos generales de migración
- Residentes
- Inmigrantes
- Emigrantes
- % Inmigrantes
- % Emigrante
- Migración bruta
- Migración Neta
- % Tasa de migración bruta
- % Tasa de migración neta
Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora
################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
as.data.frame() %>%
group_by(CVE_ZM) %>%
summarise(Pob.Total = sum(FACTOR))
################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
as.data.frame() %>%
mutate(EDAD = as.numeric(.$EDAD)) %>%
subset((EDAD >= 12 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
group_by(CVE_ZM) %>%
summarise(Pob.ocupada = sum(FACTOR))
################################################################################
########################### Residentes #########################################
load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Matriz de movilidad laboral a nivel intermunicipal 2020.RData"))
ZM <- lapply(1:length(zm), function(x){
ZM_2020 %>%
select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
filter(CVE_ZM %in% zm[x]) %>%
pull(CVE_MUN)
})
Residentes <- lapply(1:length(zm), function(x){
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN == CVE_MUN_TRABAJO) %>%
filter(CVE_MUN %in% ZM[[x]]) %>%
summarize(Residentes = sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
}
)
Residentes <- do.call(rbind.data.frame, Residentes)
################################################################################
############################### Inmigrantes ####################################
## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- lapply(1:length(zm), function(x){
Migrantes %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
filter(CVE_MUN %in% ZM[[x]]) %>%
summarize(Inmigrantes = sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
})
Inmigrantes <- do.call(rbind.data.frame, Inmigrantes)
################################################################################
############################### Emigrantes #####################################
## Población que entra a la entidad para trabajar
Emigrantes <- lapply(1:length(zm), function(x){
Migrantes %>%
t() %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "CVE_MUN") %>%
melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
mutate_at(vars(3), as.numeric) %>%
filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
filter(CVE_MUN %in% ZM[[x]]) %>%
summarize(Emigrantes = sum(value, na.rm = TRUE)) %>%
mutate(CVE_ZM = !!paste0(zm[x]))
})
Emigrantes <- do.call(rbind.data.frame, Emigrantes)
tabla <- Pob.Total %>%
left_join(., Pob.ocupada, by = c("CVE_ZM")) %>%
left_join(., Residentes, by = c("CVE_ZM")) %>%
left_join(., Inmigrantes, by = c("CVE_ZM")) %>%
left_join(., Emigrantes, by = c("CVE_ZM")) %>%
mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
Mig.Bruta = .$Inmigrantes + .$Emigrantes,
Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
Tasa.Mig = Tasa.Inmig - Tasa.Emig,
Eficacia = Mig.Neta - Mig.Bruta)
write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Intermetropolitano) 2020.xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2020/03_Movilidad laboral/Indicadores de MTrab por ZM 2020 (Intermetropolitano) 2020.RData"))| Indicadores de movilidad laboral | |||||||||||
| Zonas Intermetropolitano | |||||||||||
| CVE_ZM | Pob.Total | Pob.ocupada | Residentes | Inmigrantes | Emigrantes | Mig.Neta | Mig.Bruta | Tasa.Inmig | Tasa.Emig | Tasa.Mig | Eficacia |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Fuente: Estimaciones del CONAPO. | |||||||||||
Librerias que se usaron en el documento
| package | loadedversion | source |
|---|---|---|
| Cairo | 1.6-1 | CRAN (R 4.3.1) |
| chorddiag | 0.1.3 | Github (mattflor/chorddiag@1688d72cd93071abb373e054190363bdfb3af2af) |
| circlize | 0.4.15 | CRAN (R 4.3.1) |
| doMC | 1.3.5 | R-Forge (R 4.3.1) |
| dplyr | 1.1.3 | CRAN (R 4.3.2) |
| expss | 0.11.6 | CRAN (R 4.3.1) |
| extrafont | 0.19 | CRAN (R 4.3.0) |
| foreach | 1.5.2 | CRAN (R 4.3.1) |
| ggalluvial | 0.12.5 | CRAN (R 4.3.1) |
| ggplot2 | 3.4.3 | CRAN (R 4.3.1) |
| ggpubr | 0.6.0 | CRAN (R 4.3.1) |
| ggrepel | 0.9.3 | CRAN (R 4.3.1) |
| ggsankey | 0.0.99999 | Github (davidsjoberg/ggsankey@3e171a83a5364bb24df7cb2cd9203dd79b1dae29) |
| gt | 0.10.0 | CRAN (R 4.3.1) |
| haven | 2.5.3 | CRAN (R 4.3.1) |
| Hmisc | 5.1-0 | CRAN (R 4.3.1) |
| iterators | 1.0.14 | CRAN (R 4.3.1) |
| janitor | 2.2.0 | CRAN (R 4.3.1) |
| kableExtra | 1.3.4 | CRAN (R 4.3.1) |
| knitr | 1.45 | CRAN (R 4.3.2) |
| maditr | 0.8.3 | CRAN (R 4.3.1) |
| Matrix | 1.6-1.1 | CRAN (R 4.3.1) |
| network | 1.18.1 | CRAN (R 4.3.1) |
| openxlsx | 4.2.5.2 | CRAN (R 4.3.1) |
| reshape2 | 1.4.4 | CRAN (R 4.3.1) |
| showtext | 0.9-6 | CRAN (R 4.3.1) |
| showtextdb | 3.0 | CRAN (R 4.3.1) |
| sjlabelled | 1.2.0 | CRAN (R 4.3.1) |
| sna | 2.7-1 | CRAN (R 4.3.1) |
| srvyr | 1.2.0 | CRAN (R 4.3.1) |
| statnet.common | 4.9.0 | CRAN (R 4.3.1) |
| stringr | 1.5.0 | CRAN (R 4.3.1) |
| survey | 4.2 | Github (bschneidr/fastsurvey@5e4df7bd6c4bac44fa9c6681db40c496dd701f45) |
| survival | 3.5-5 | CRAN (R 4.3.1) |
| sysfonts | 0.8.8 | CRAN (R 4.3.1) |
| tibble | 3.2.1 | CRAN (R 4.3.1) |
| tidyr | 1.3.0 | CRAN (R 4.3.1) |
This
work by Diana Villasana
Ocampo is licensed under a
Creative
Commons Attribution 4.0 International License.